Refer to the exhibit. Which path will traffic from the 172.16.1.0/24 network take to get to the 10.0.0.0/24 network?

Computer science659.28 KB

Autouzupełnianie poleceń w bashu

Kategoria: Bash, Ubuntu / Tag: Bash, debian, Linux, Ubuntu / Dodaj komentarz

Wiadomo, że dużym ułatwieniem przy pracy w linuksowej konsoli jest klawisz .
Podwójne wciśnięcie listuje dostępne ścieżki a pojedyncze je uzupełnia oszczędzając nam wpisywania wszystkiego z palca.

Można jednak tą funkcjonalność znacznie rozszerzyć tak aby  uzupełniał nam również parametry i komendy konsolowych programów. Na przykład wystarczy wpisać: aptitude i i raz wcisnąć  a bash automatycznie uzupełni komendę do: aptitude install

Aby mieć tak przyjaznego basha należy zainstalować pakiet bash-completion:

aptitudeinstall bash-completion

Jeśli posiadamy Debiana trzeba jeszcze edytować plik /etc/bash.Bashrc i odkomentować w nim linie:

if[-f/etc/bash_completion ]; then
    . /etc/bash_completion
fi

W Ubuntu ten pakiet jest domyślnie skonfigurowany.


Poprawienie wyglądu Eclipse pod Linuksem

Luty 5th, 2012

Tworzymy plik .Gtkrc-eclipse w katalogu domowym:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
style „gtkcompact” {
 Font_name = „Sans Condensed 8″
 GtkButton::default_border={0,0,0,0}
 GtkButton::default_outside_border={0,0,0,0}
 GtkButtonBox::child_min_width=0
 GtkButtonBox::child_min_heigth=0
 GtkButtonBox::child_internal_pad_x=0
 GtkButtonBox::child_internal_pad_y=0
 GtkMenu::vertical-padding=1
 GtkMenuBar::internal_padding=0
 GtkMenuItem::horizontal_padding=4
 GtkOptionMenu::indicator_size=0
 GtkOptionMenu::indicator_spacing=0
 GtkPaned::handle_size=4
 GtkRange::trough_border=0
 GtkRange::stepper_spacing=0
 GtkScale::value_spacing=0
 GtkScrolledWindow::scrollbar_spacing=0
 GtkExpander::expander_size=10
 GtkExpander::expander_spacing=0
 GtkTreeView::vertical-separator=0
 GtkTreeView::horizontal-separator=0
 GtkTreeView::expander-size=8
 GtkTreeView::fixed-height-mode=TRUE
 GtkWidget::focus_padding=0
 }
 Class „GtkWidget” style „gtkcompact”

Instalujemy dowolny styl GTK, na przykład Clearlooks.
Eclipse uruchamiamy ustawiając wcześniej zmienną środowiskową:

GTK2_RC_FILES=/usr/share/themes/Clearlooks/gtk-2.0/gtkrc:~/.Gtkrc-eclipse

Jeżeli Eclipse nadal wygląda jak rozjechana kobyła, można spróbować jeszcze przerobionego stylu Clearlooks ze strony:

http://martin.Ankerl.Com/2007/11/04/clearlooks-compact-gnome-theme

Plik .Gtkrc zaczerpnięty z komentarza użytkownika wesley z bloga:

http://blog.Xam.Dk


Praca z obrazami ISO

Kwiecień 13th, 2013

Najprostszy sposób na stworzenie obrazu ISO to zastosowanie polecenia cat:

cat /dev/cdrom > obraz.Iso

lub wykorzystanie programu narzędziowego dd:

dd if=/dev/cdrom of=obraz.Iso

Innym sposobem jest użycie narzędzia mkisofs;

mkisofs -V "Etykieta" -o obraz.Iso katalog_źródła

Nagrać obraz ISO możemy przez cdrecord:

cdrecord -v dev=/dev/cdrom obraz.Iso -speed 8

Z obrazu ISO możemy również stworzyć bootowalny USB, do tego celu wykorzystać można program Unetbootin lub przez isohybrid:

isohybrid obraz.Iso
Dd if=obraz.Iso of=/dev/sdb1 lub cat obraz.Iso > /dev/sdb1


Połączenie WIFI z hasłem WPA w konsoli

Połączenie WIFI w systemie Linux z użyciem hasła WPA

Na początku wyszukujemy dostępne sieci:

iwlist wlan0 scan 

W wyniku otrzymamy dostępne sieci z nazwą ESSID i innymi parametrami jak kanał, siła sygnału czy jakość sygnału.
Do ustanowienia połączenia z użyciem hasła WPA korzystamy z wpa_supplicant. Najpierw przygotujmy plik konfiguracyjny:

 wpa_passphrase "MyEssid"

W odpowiedzi wpisujemy hasło do sieci. Wynik wklejamy do stworzonego pliku /etc/wpa_supplicant.Conf

network={   ssid="MySSID"   #psk="mypassword"   psk=949744ef68a32f47239b005309823712728ea8238928f6649e2a1be9c43cab   proto=WPA   key_mgmt=WPA-PSK } 

Aby uruchomić połączenie korzystamy z polecenia:

wpa_supplicant -D wext -c /etc/wpa_supplicant.Conf -i wlan0 

a następnie

dhclient wlan0

aby pobrać adres IP


Instalacja i konfiguracja Apache, PHP5, Ruby, Python, CGI, WebDAV Ubuntu/Debian

Linux, Sieć

Spis treści [ukryj]

Instalacja i konfiguracja Apache, PHP5, Ruby, Python, CGI, WebDAV Ubuntu/Debian

1. Instalacja Apache.

sudo aptitude install apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2-suexec libexpat1 ssl-cert

2. Instalacja PHP5, Ruby i Python (jako moduły do Apache).


sudo aptitude install libapache2-mod-php5 libapache2-mod-ruby libapache2-mod-python php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

3. Edycja /etc/apache2/mods-available/dir.Conf i zmiana DirectoryIndex.

sudo nano /etc/apache2/mods-available/dir.Conf
          #DirectoryIndex index.Html index.Cgi index.Pl index.Php index.Xhtml index.Htm
          DirectoryIndex index.Html index.Htm index.Shtml index.Cgi index.Php index.Php3 index.Pl index.Xhtml

4. Włączanie modułów w Apache takich jak: SSL, rewrite, suexec, include i WebDAV.

sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod suexec
sudo a2enmod include
sudo a2enmod dav_fs
sudo a2enmod dav

5. Restart Apache:

sudo /etc/init.D/apache2 restart

Testujemy serwer

http://127.0.0.1/

6. Test PHP.

Tworzymy plik index.Php aby przetestować działanie serwera i zapisujemy go w /var/www/.

sudo nano /var/www/index.Php

Zmieniamy uprawnienia do pliku index.Php

sudo chmod 755 /var/www/index.Php

Restart Apache2.

sudo /etc/init.D/apache2 restart

i testujemy w przeglądarce:

http://127.0.0.1/index.Php

index-php

7. Włączanie skryptów CGI

Edytujemy plik /etc/apache2/mods-enabled/mime.Conf i usuwamy hash


nano /etc/apache2/mods-enabled/mime.Conf
[...]
#AddHandler cgi-script .Cgi .Pl
[...]

Tworzymy plik index.Cgi aby przetestować działanie serwera i zapisujemy go w /var/www/.

sudo nano /var/www/index.Cgi
#!/usr/bin/perl
# test.Cgi by Bill Weinman [http://bw.Org/]
# Copyright 1995-2008 The BearHeart Group, LLC
# Free Software: Use and distribution under the same terms as perl.

Use strict;
Use warnings;
Use CGI;

Print foreach (
    "Content-Type: text/plain\n\n",
    "BW Test version 5.0\n",
    "Copyright 1995-2008 The BearHeart Group, LLC\n\n",
    "Versions:\n=================\n",
    "perl: $]\n",
    "CGI: $CGI::VERSION\n"
);

My $q = CGI::Vars();
Print "\nCGI Values:\n=================\n";
Foreach my $k ( sort keys %$q ) {
    Print "$k [$q->{$k}]\n";
}

Print "\nEnvironment Variables:\n=================\n";
Foreach my $k ( sort keys %ENV ) {
    Print "$k [$ENV{$k}]\n";
}

Zmieniamy uprawnienia do pliku index.Cgi

sudo chmod 755 /var/www/index.Cgi

Restart Apache

sudo /etc/init.D/apache2 restart

i testujemy w przeglądarce

http://127.0.0.1/index.Cgi

index-cgi

8. Jeśli masz zamiar zarządzać serwerem za pomocą ISPConfig wykonaj następujące czynności

Aby wszyskie pliki Ruby były wykonywane i wyświetlane poprawnie (.Rbx i .Rb) w pliku konfiguracyjnym /etc/mime.Types musimy odblokować linię usuwając hash.

sudo nano /etc/mime.Types
[...]
#application/x-ruby                             rb
[...]

9. Wyłączanie globalnych ustawień PHP

Zarządzając serwerem z panela kontrolnego ISPConfig przy wyłączonych globalnych ustawieniach PHP, możesz zdecydować które strony mogą wykonywać skrypty PHP a które nie.
W przeciwnym wypadku wszystkie strony będą mogły uruchomić skrypty ignorując ustawienia w panelu kontrolnym.

Aby wyłączyć te ustawienia edytujemy plik /etc/mime.Types i usuwamy hashe:

sudo nano /etc/mime.Types
[...]
#application/x-httpd-php                        phtml pht php
#application/x-httpd-php-source                 phps
#application/x-httpd-php3                       php3
#application/x-httpd-php3-preprocessed          php3p
#application/x-httpd-php4                       php4
#application/x-httpd-php5                       php5
[...]

Następnie edytujemy plik /etc/apache2/mods-enabled/php5.Conf i usuwamy hash w linii SetHandler:

sudo nano /etc/apache2/mods-enabled/php5.Conf
    
        #SetHandler application/x-httpd-php
    
    
        #SetHandler application/x-httpd-php-source
    
    # To re-enable php in user directories comment the following lines
    # (from  to .) Do NOT set it to On as it
    # prevents .Htaccess files from disabling it.
    
        
            Php_admin_value engine Off
        
    

10. Tworzenie prywatnych certyfikatów.

10.1. Generowanie certyfikatu.

Generowanie prywatnego certyfikatu dla domeny: domena.Pl.

sudo mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
sudo openssl genrsa -des3 -out domena.Pl.Key 1024
Generating RSA private key, 1024 bit long modulus
.......................++++++
.......++++++
e is 65537 (0×10001)
Enter pass phrase for domena.Pl.Key: wpisujemy hasło
Verifying - Enter pass phrase for domena.Pl.Key: ponownie wpisujemy hasło
10.2. Generowanie certyfikatu (Certificate Signing Request).
sudo openssl req -new -key domena.Pl.Key -out domena.Pl.Csr
Enter pass phrase for domena.Pl.Key: wpisujemy hasło
...
...
Country Name (2 letter code) [GB]: wpisujemy np: PL
State or Province Name (full name) [Some-State]: wpisujemy np: Dolny_Slask
Locality Name (eg, city) []: wpisujemy np: Wroclaw
Organization Name (eg, company) []: wpisujemy np: inet
Organizational Unit Name (eg, section) []: wpisujemy np: IT
Common Name (eg, your name or your server’s hostname) []: wpisujemy np: domena.Pl
Email Address []: wpisujemy np: user dot surname at domena dot pl
Please enter the following ‚extra’ attributes
to be sent with your certificate request
A challenge password []: zostawiamy puste
An optional company name []: zostawiamy puste
10.3 Usuwanie hasła z domena.Pl.Key
sudo cp domena.Pl.Key domena.Pl.Key.Org
sudo openssl rsa -in domena.Pl.Key.Org -out domena.Pl.Key

Enter pass phrase for domena.Pl.Key.Org: wpisujemy hasło
writing RSA key

10.4. Generowanie Self-Signed Certificate.


sudo openssl x509 -req -days 365 -in domena.Pl.Csr -signkey domena.Pl.Key -out domena.Pl.Crt

Signature ok
subject=/C=PL/ST=Dolny_Slask/L=Wroclaw/O=inet/OU=IT/CN=domena.Pl
Getting Private key

10.5. Instalacja klucza prywatnego i certyfikatu.

Tworzymy host nasłuchujacy na porcie 80 i 443.
Dodajemy wpis do pliku konfiguracyjnego np /etc/apache2/httpd.Conf:

# HOST NA PORCIE 80
#=================================================================================

ServerName domena.Pl
ServerAdmin webm...@domena.Pl

DocumentRoot /var/www

ErrorLog /var/log/apache2/error.Log
CustomLog /var/log/apache2/access.Log combined

  Order deny,allow
  Allow from all

# Alternatywnie - stałe przekierowanie na port 443.
Redirect permanent / https://domena.Pl/
# HOST NA PORCIE 443
#=================================================================================


Servername domena.Pl
ServerAdmin webm...@domena.Pl
DocumentRoot /var/www

ErrorLog /var/log/apache2/error-ssl.Log
CustomLog /var/log/apache2/access-ssl.Log combined

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/domena.Pl.Crt
SSLCertificateKeyFile /etc/apache2/ssl/domena.Pl.Key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog logs/ssl_request_log \
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


  Order deny,allow
  Allow from all

11. Restart Apache:

sudo /etc/init.D/apache2 restart

Install MySQL

MySQL is a powerful database management system used for organizing and retrieving data

To install MySQL, open terminal and type in these commands:

sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql


During the installation, MySQL will ask you to set a root password. If you miss the chance to set the password while the program is installing, it is very easy to set the password later from within the MySQL shell.

Once you have installed MySQL, we should activate it with this command:

sudo mysql_install_db


Finish up by running the MySQL set up script:

sudo /usr/bin/mysql_secure_installation

Take a Screenshot from Command Line

To take a screenshot from command line (even from ssh connection) in a system running X server:
1

xwd -out screenshot.Xwd -root -display :0.0

More about xwd here.

More options here.


After installing Xdebug, we need to inform PHP that the extension is available and set a few basic options. We can do this by editing the

php.Ini file we copied earlier, which contains a myriad of settings for PHP’s operation.

sudo mate /usr/local/php/etc/php.Ini

Add the following to the end of the file:

zend_extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.So
Xdebug.Remote_enable=1
Xdebug.Remote_host=localhost
Xdebug.Remote_port=9000
Xdebug.Remote_autostart=1


Naprawa hibernacji po zmianie partycji swap

Naprawa hibernacji nie jest czynnością trudną, pod warunkiem oczywiście, że wie się jak to robić ;-) Tak się niestety złożyło, że uszkodziła mi się partycja swap. Swap to nie home, więc czym prędzej ją sformatowałem, ale w wyniku takiej operacji (podobnie jak w wyniku zmiany wielkości partycji, tudzież jej przeniesienia) zmienia się UUID partycji. System nie widzi nowej partycji swap, bo poszukuje jej pod starym numerem UUID, aby więc system działał nam jak dotychczas, musimy go poinformować o tej zmianie.

Mountujemy nową partycję swap

Naprawę hibernacji zaczynamy od wklepania w konsoli / terminalu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo fdisk -l
Dysk /dev/sda: 500.1 GB, bajtów: 500107862016
głowic: 255, sektorów/ścieżkę: 63, cylindrów: 60801
Jednostka = cylindrów, czyli 16065 * 512 = 8225280 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512

Identyfikator dysku: 0x000d5aaf

Urządzenie Rozruch Początek Koniec Bloków ID System

/dev/sda1 * 1 6374 51199123+ 83 Linux
/dev/sda2 6375 12748 51199155 83 Linux
/dev/sda3 12749 59661 376828672+ 7 HPFS/NTFS
/dev/sda4 59662 60802 9158656 82 Linux swap / Solaris

W powyższym przypadku partycja swap to /dev/sda4. Teraz sprawdzamy jej UUID:

1
2
3
4
5
6
$ ls -l /dev/disk/by-uuid
razem 0
lrwxrwxrwx 1 root root 10 2011-03-22 12:11 7930245438267846 -> ../../sda3
lrwxrwxrwx 1 root root 10 2011-03-22 12:11 b87b00a1-5483-4f4b-b290-35e30c9f2a1b -> ../../sda4
lrwxrwxrwx 1 root root 10 2011-03-22 11:53 c546c420-6293-4b16-b335-6db7f413eb48 -> ../../sda2
lrwxrwxrwx 1 root root 10 2011-03-22 12:11 e6797174-1096-47dc-8224-858eb911d95b -> ../../sda1

Następnie edytujemy /etc/fstab naszym ulubionym edytorem:

1
sudo nano/etc/fstab

powinniśmy uzyskać coś takiego:

1
UUID=b87b00a1-5483-4f4b-b290-35e30c9f2a1b none swap sw 0 0

Naprawa hibernacji

Zasadnicza naprawa hibernacji sprowadza się do edycji jednego pliku /etc/initramfs-tools/conf.D/resume:

1
sudo nano/etc/initramfs-tools/conf.d/resume

plik ten powinien wyglądać następująco:

1
RESUME=UUID=b87b00a1-5483-4f4b-b290-35e30c9f2a1b

Na koniec aktualizujemy iniramfs:

1
sudo update-initramfs-kall-u

Naprawa hibernacji zakończona.


Dodawanie drukarki udostępnionej w Windows

14 września 2012
2

Sytuacja wygląda następująco, otóż są dwa komputery:

  1. Komputer z Windows do którego podpięta jest drukarka i ta drukarka została udostępniona
  2. Komputer z Linuksem z którego chcemy drukować na udostępnionej drukarce

Myślę, że wersje systemów nie mają tu większego znaczenia, ale w opisywanym przypadku były to: Windows 7 oraz LMDE z XFCE.

Sprawa, wydawałoby się, prosta, ale nie do końca… We wspomnianej powyżej dystrybucji Linux Mint Debian Edition 201204 z XFCE brakuje kilku niezbędnych pakietów, które musimy doinstalować:

1
sudo apt-get install smbclient python-smbc libpam-smbpass

Dalszy proces instalacji drukarki możemy już wyklikać. Uruchamiamy aplet dodawania drukarek (System ->Drukowanie) lub z konsoli system-config-printer, klikamy Dodaj. Widzimy po prawej stronie nową pozycję Drukarka Windows przez Sambę

Nowa drukarka

Nowa drukarka

Klikamy Przeglądaj, otworzy nam się Przeglądarka SMB, gdzie wyszykujemy naszą udostępnioną drukarkę:

Przeglądarka SMB

Przeglądarka SMB

Teraz pozostaje zainstalować sterowniki drukarki:

Wybór sterownika

Wybór sterownika


W zależności od sterownika możemy też wybrać dodatkowe opcje instalacyjne.


iptables – prosty, skuteczny firewall

14 stycznia 2013
4

iptables to filtr pakietów dla systemu operacyjnego GNU/Linux używanym głownie jako router lub firewall, umożliwia definiowanie tabel zawierających łańcuchy reguł stosowanych dla pakietów. Każda z tabel służy do przetwarzania pakietów różnego rodzaju i zawiera kilka łańcuchów.

Domyśle tabele i łańcuchy iptables

  • filter – domyślna tabela w której najczęściej tworzy się reguły. W niniejszym przykładzie właśnie w niej będziemy tworzyć nasze reguły. Tabela ta zawiera 3 domyślne łańcuchy:
    • INPUT – obsługuje pakiety przychodzące z zewnątrz przeznaczone dla lokalnego hosta
    • FORWARD – obsługuje pakiety routowane przez hosta pomiędzy interfejsami sieciowymi, czyli przechodzące przez hosta i przekazywane dalej
    • OUTPUT – obsługuje pakiety generowanie lokalnie przez hosta na którym pracuje netfilter
  • nat – tabela stosowana do pakietów, które nawiązują nowe połączenie, zawiera 3 domyślne łańcuchy:
    • PREROUTING – służy do modyfikowania pakietów przychodzących od razu gdy przyjdą jeszcze przed ich dalszym filtrowaniem)
    • OUTPUT – służy do modyfikowania pakietów generowanych lokalnie przez hosta przed ich routowaniem
    • POSTROUTING – służy do modyfikowania pakietów, które mają wyjść, tuż przed ich wysłaniem
  • mangle – tabela stosowana do wyspecjalizowanych zmian w pakietach, zawiera 5 domyślnych łańcuchów:
    • PREROUTING – służy do modyfikowania pakietów przychodzących zanim zostaną rutowane
    • OUTPUT – służy do modyfikowania pakietów generowanych lokalnie przez hosta przed ich routowaniem
    • INPUT – służy do modyfikowania pakietów przychodzących z zewnątrz przeznaczonych do lokalnego hosta
    • FORWARD – służy do modyfikowania pakietów routowanych przez hosta (pomiędzy interfejsami sieciowymi)
    • POSTROUTING – służy do modyfikowania pakietów po routingu, tuż przed ich wysłaniem
  • raw – do tej tabeli pakiety trafiają najpierw – ma ona najwyższy priorytet
    • PREROUTING – pakiety przychodzące przez jakikolwiek interfejs sieciowy
    • OUTPUT – pakiety generowane przez lokalne procesy

Akcje, operacje i opcje iptables

Pakiet trafia więc do tabeli tam natrafia na nasze reguły, które mogą skierować go do łańcucha zdefiniowanego przez użytkownika lub do jednej z wbudowanych akcji, w poniższym przykładzie wykorzystane zostanie tylko 5 z nich:

  • ACCEPT – oznacza zaakceptowanie pakietu
  • DROP – oznacza porzucenie pakietu
  • REJECT – oznacza odrzucenie pakietu z powiadomieniem nadawcy o odrzuceniu
  • RETURN – oznacza skierowanie z powrotem pakietu do łańcucha z którego przyszedł
  • LOG – oznacza zapisanie informacji o pakiecie do /var/log/syslog

Z kolei podstawowe operacje na łańcuchach, wykorzystane w poniższym przykładzie to:

  • -F – wyczyszczenie reguł z łańcucha
  • -X – skasowanie pustego łańcucha
  • -P – ustawienie domyślnej polityki dla łańcucha
  • -A – dodanie nowej reguły na końcu łańcucha
  • -L – listowanie reguł w łańcuchu

Podstawowa wersja firewalla opartego na iptables

Przedstawiona powyżej wiedza pozwala nam na napisanie podstawowej wersji firewalla, która naprawdę stanowi dobre zabezpieczenie:

1
2
3
4
5
6
7
8
9
10
11
iptables-F
iptables-X
iptables-F-tnat
iptables-X-tnat
iptables-F-tfilter
iptables-X-tfilter
iptables-PINPUT DROP
iptables-PFORWARD DROP
iptables-POUTPUT ACCEPT
iptables-AINPUT-ilo-jACCEPT
iptables-AINPUT-mstate--state ESTABLISHED,RELATED-jACCEPT

Pierwsze 6 reguł czyści nam naszego firewalla. Kolejne 3 ustalają domyślną politykę. Zakładam, że firewalla piszemy dla stacji roboczej, więc blokujemy natomiast pakiety przychodzące do naszego hosta przeznaczone dla niego lub do dalszego routowania. Natomiast pakiety wygenerowane lokalnie przez hosta i wychodzące na zewnątrz akceptujemy. Kolejna reguła to akceptacja lokalnego ruchu wchodzącego (w obrębie naszego hosta), jest to potrzebne do działania wielu lokalnych usług klient – serwer. Ostatnia reguła pozwala na połączenia już istniejące albo powiązane z już istniejącymi, jest to konieczne aby w ogóle nadal korzystać z internetu.

Wykorzystane powyżej przełączniki to:

  • -t – wybiera tablicę w której dokonane mają być zmiany
  • -i – określa interfejs sieciowy, którym pakiet przyszedł (eth0, eth1, lo)
  • -j – określa łańcuch (akcję) do którego ma trafić pakiet
  • -m – wczytuje określony moduł

W powyższym przypadku wczytany zostaje moduł state, pozwalający na sprawdzenie stanu pakietu przy pomocy przełącznika –state. Stany mogą być następujące:

  • NEW – pakiety, które tworzą nowe połączenie
  • ESTABLISHED – pakiety, które należą do już nawiązanego połączenia
  • RELATED – pakiety tworzące nowe połączenie związane z już istniejącym połączeniem
  • INVALID – pakiety uszkodzone

Zaprzeczenie tworzymy poprzez poprzedzenie stanu wykrzyknikiem, przykładowo jeśli chcemy wpuścić wszystkie pakiety poza uszkodzonymi: --state ! INVALID

Ident

Wiele usług, jak na przykład SMTP czy FTP, przed połączeniem z klientem, próbuje się połączyć z usługą ident, jako że zgodnie z naszą domyślną polityką dla pakietów przychodzących pakiet taki zostaje porzucony, następuje kilkusekundowe opóźnienie, które jakkolwiek nie przeszkadza w komunikacji to jednak ją opóźnia, w związku z czym aby tego uniknąć należy poinformować serwer o odrzuceniu pakietu:
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with icmp-port-unreachable

Nowe przełączniki to:

  • -p – określa protokół sieciowy (tcp, udp, icmp)
  • --dport – określa port docelowy

Ping

Aby zabezpieczyć się przed atakiem Ping of death proponuję:

1
2
iptables-AINPUT-picmp--icmp-type echo-request-mlimit--limit1/s-jLOG--log-prefix"Ping: "
iptables-AINPUT-picmp--icmp-type echo-request-mlimit--limit1/s-jACCEPT# Ping of death

Pierwsza reguła zapisze kto pingował naszego hosta, druga odpowie na pinga z częstotliwością 1 na sekundę. Jeśli chcemy całkowicie wyłączyć odpowiadanie na pingi, oto bardziej paranoiczna wersja ostatniej reguły:

1
iptables-AINPUT-picmp--icmp-type echo-request-jREJECT--reject-with icmp-host-unreachable

Nowe przełączniki to:

  • --icmp-type – pozwala na wybranie typu pakietów icmp które mają być poddane sprawdzeniu (echo-request, destination-unreachable, echo-reply)
  • --limit – określa limit przepuszczanych w jednostce czasu pakietów (wymagany moduł limit)
  • --log-prefix – powoduje dopisanie jakiegoś prefiksu do loga, co powoduje że staje się ona bardziej czytelny dla człowieka
  • --reject-with – powoduje odrzucenie danego pakietu z innym niż domyślnym pakietem icmp do wyboru

Programy peer-to-peer

Porty od 1024 wzwyż mogą być i są bindowane przez programy do komunikacji bezpośredniej np. Kadu, aby mogły one działać musimy więc te porty otworzyć na nowo przychodzące pakiety:

1
2
iptables-AINPUT-mstate--state NEW-ptcp--dport1024:65535-jACCEPT
iptables-AINPUT-mstate--state NEW-pudp--dport1024:65535-jACCEPT

Reguły te są możliwie najbardziej liberalne. Można oczywiście zawęzić zakres portów, ale wymaga to sprawdzenia dokumentacji każdego z używanych przez nas programów peer-to-peer.

Dostęp do serwerów

Jeśli mamy zainstalowane na naszym hoście jakieś serwery usług internetowych, czynimy podobnie jak w przypadku programów peer-to-peer, z tym że otwieramy konkretne porty, w poniższym przypadku są to porty: 22 (ssh), 80 (http) i 443 (https):

1
iptables-AINPUT-mmultiport-ptcp--dports22,80,443-jACCEPT

Ochrona przed atakami

Do pełni szczęścia brakuje nam jeszcze tylko ochrony przed skanowaniem portów:

1
2
3
4
5
6
7
8
iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK-jLOG--log-prefix"ACK scan: "
iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK-jDROP# Metoda ACK (nmap -sA)
iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN-jLOG--log-prefix"FIN scan: "
iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN-jDROP# Skanowanie FIN (nmap -sF)
iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH PSH-jLOG--log-prefix"Xmas scan: "
iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN,URG,PSH-jDROP# Metoda Xmas Tree (nmap -sX)
iptables-AINPUT-mconntrack--ctstate INVALID-ptcp!--tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG-jLOG--log-prefix"Null scan: "
iptables-AINPUT-mconntrack--ctstate INVALID-ptcp!--tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG-jDROP# Skanowanie Null (nmap -sN)

oraz przed atakiem SYN flood (denial-of-service):

1
2
3
4
5
iptables-Nsyn-flood
iptables-AINPUT-ptcp--syn-jsyn-flood
iptables-Asyn-flood-mlimit--limit1/s--limit-burst4-jRETURN
iptables-Asyn-flood-mlimit--limit1/s--limit-burst4-jLOG--log-prefix"SYN-flood: "
iptables-Asyn-flood-jDROP

Nowe przełączniki to:

  • --ctstate – określa stan pakietu (wymagany moduł conntrack)
  • --tcp-flags – pozwala na filtrowane na podstawie specyficznych flag TCP, za przełącznikiem może być znak ! Oznaczający przeczenie, następnie łańcuch flag stanowiący maskę – listę flag do sprawdzenia, oraz kolejny łańcuch określający które flagi mają zostać ustawione.
  • --syn – skrót dla --tcp-flags SYN,RST,ACK SYN
  • --limit-burst – określa maksymalną serię, po której określony limit się włącza

Instalacja skryptu firewalla opartego na iptables

Na koniec do naszego skryptu dodajmy możliwość wyłączenia firewalla.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

#!/bin/bash

# czyścimy wszystko iptables-F

iptables-X
iptables-F-tnat
iptables-X-tnat
iptables-F-tfilter
iptables-X-tfilter
if["$1"="stop"]
then
iptables-PINPUT ACCEPT
iptables-PFORWARD ACCEPT
iptables-POUTPUT ACCEPT

exit fi

# ustalamy domyślną politykę dla filtrów iptables-PINPUT DROP

iptables-PFORWARD DROP

iptables-POUTPUT ACCEPT

# pełny ruch na interfejsie lo (potrzebne do działania wielu lokalnych usług)

iptables-AINPUT-ilo-jACCEPT

# odrzucamy ident iptables-AINPUT-ptcp--dport113-jREJECT--reject-with icmp-port-unreachable

# ochrona przed atakami

iptables-AINPUT-picmp--icmp-typeecho-request-mlimit--limit1/s-jLOG--log-prefix"Ping: "

iptables-AINPUT-picmp--icmp-typeecho-request-mlimit--limit1/s-jACCEPT# Ping of death # iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable

iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK-jLOG--log-prefix"ACK scan: "

iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK-jDROP# Metoda ACK (nmap -sA)

iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN-jLOG--log-prefix"FIN scan: "

iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN-jDROP# Skanowanie FIN (nmap -sF)
iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH PSH-jLOG--log-prefix"Xmas scan: "
iptables-AINPUT-mconntrack--ctstate NEW-ptcp--tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN,URG,PSH-jDROP# Metoda Xmas Tree (nmap -sX)
iptables-AINPUT-mconntrack--ctstate INVALID-ptcp!--tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG-jLOG--log-prefix"Null scan: "
iptables-AINPUT-mconntrack--ctstate INVALID-ptcp!--tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG-jDROP# Skanowanie Null (nmap -sN)

# Łańcuch syn-flood (obrona przed DoS) iptables-Nsyn-flood

iptables-AINPUT-ptcp--syn-jsyn-flood
iptables-Asyn-flood-mlimit--limit1/s--limit-burst4-jRETURN
iptables-Asyn-flood-mlimit--limit1/s--limit-burst4-jLOG--log-prefix"SYN-flood: "

iptables-Asyn-flood-jDROP

# pozwalamy na wszystkie istniejące już połączenia oraz połączenia które są powiązane z istniejącymi już połączeniami

iptables-AINPUT-mstate--state ESTABLISHED,RELATED-jACCEPT

# cały ruch powyżej portów 1024, to są porty które mogą być bindowane przez wszystko (chociażby np. Kadu) iptables-AINPUT-mstate--state NEW-ptcp--dport1024:65535-jACCEPT

iptables-AINPUT-mstate--state NEW-pudp--dport1024:65535-jACCEPT

# uruchomione serwery na portach poniżej 1024: ssh, http, https iptables-AINPUT-mstate--state NEW-mmultiport-ptcp--dports22,80,443-jACCEPT

# Samba

iptables-AINPUT-mstate--state NEW-mmultiport-pudp--dports137,138--source192.168.1.0/24-jACCEPT
iptables-AINPUT-mstate--state NEW-mmultiport-ptcp--dports139,445--source192.168.1.0/24-jACCEPT

A oto gotowy skrypt do ściągnięcia:

Download iptables firewall

Download iptables firewall


zapisujemy go, a następnie wykonujemy:

1
2
sudo cp firewall/etc/init.d/
sudo update-rc.dfirewall defaults90

co sprawi, że nasz firewall będzie uruchamiał się od razu po inicjalizacji kernela, ponadto od tej chwili możemy zatrzymać firewalla komendą:

1
sudo/etc/init.d/firewall stop

i powtórnie uruchomić komendą:

1
sudo/etc/init.d/firewall

natomiast sprawdzić stan firewalla możemy komendą:

1
sudo iptables-L

Naszego firewalla możemy przetestować na stronie ShieldsUP!. Wybieramy skanowanie wszystkich portów. Powinniśmy uzyskać same zielone kwadraty.

ShieldsUP! - test firewalla opartego na iptables

ShieldsUP! – test firewalla opartego na iptables

Jeśli w sekcji dotyczącej pingowania wybraliśmy pierwszą regułę, to mimo wszystkich zielonych kwadratów serwis stwierdzi, że nie zdaliśmy testu (duży czerwony napis FAILED). Mamy dwa wyjścia, albo to olewamy albo stosujemy drugą z podanych reguł.


IP Table Commands

Although this tutorial will go over a limited amount of commands that would provide a server with some basic security, there are a variety of nuanced and specific cases that can be developed for the IP Table. Below are some of the most useful commands for developing a firewall for your VPS, but keep in mind that this is a short list and there are a variety of other options.

-A: (Append), adds a rule to the IP Tables
-L:  (List), shows the current rules
-m conntrack: allows rules to be based on the current connection state, elaborated in the the --cstate command.
--cstate: explains the states that connections can be in, there are 4: New, Related, Established, and Invalid
-p: (port), refers to the the port through which the machine connects
-j: (jump), this command refers to the action that needs to be taken if something matches a  rule perfectly. It translates to one of four possibilities:
	-ACCEPT: the packet is accepted, and no further rules are processed
	-REJECT: the packet is rejected, and the 	sender is notified, and no further rules are processed
	-DROP: the packet is rejected, but the 	sender is not notified, and no further rules are processed
	-LOG: the packet is accepted but logged, and the following rules are processed 
-I: (Insert), adds a rule between two previous ones
-I INPUT 3: inserts a rule into the IP Table to make it the third in the list
-v: (verbose), offers more details about a rule


Creating the IP Table:

If you type in the following, you can see the current rules in the virtual server's IP Table:

sudo iptables -L

Saving IP Tables

sudo apt-get install iptables-persistent
Your rules will then be saved in /etc/iptables/rules.V4 and /etc/iptables/rules.V6.

Once the installation is complete, start iptables-persistent running:
sudo service iptables-persistent start


LAMP – instalacja w Ubuntu

22 listopada 2012
4

Ostatnio zostałem poproszony o instrukcję krok po kroku instalacji LAMP-a. Skoro jest takie zapotrzebowanie, postanowiłem podzielić się tą instrukcją z większą społecznością.

LAMP

LAMP jest skrótem ukutym od pierwszych liter Linux (system operacyjny), Apache HTTP Server (serwer www),MySQL (oprogramowanie bazy danych) i PHP / Perl / Python (język skryptowy). Oprogramowanie pakietu (AMP) działa na innych systemach operacyjnych, takich jak Microsoft Windows (WAMP), Mac OS (MAMP), Solaris (SAMP) lub OpenBSD (OAMP). Chociaż oryginalni autorzy tych programów nie projektowali ich wszystkich do współpracy ze sobą, to jednak współcześnie obowiązująca filozofia rozwoju i zestawy narzędzi są wspólne i zostały opracowane w ścisłej współpracy. Takie połączenie oprogramowania stało się popularne, ponieważ jest bezpłatne i wolne, a więc łatwo je modyfikować oraz ze względu na powszechność składników pakietu, które są dostarczane z każdą współczesną dystrybucją Linuksa.

Do rzeczy. Instalacji samego Linuksa nie będę omawiał ;-) Przejdę od razu do instalacji reszty LAMP-a w Ubuntu. Oczywiście wszystkie komendy wykonujemy w konsoli / terminalu.

Apache HTTP Server

1
2
3
4
5
sudo apt-get install apache2
sudo a2enmod userdir
sudo openssl req-new-x509-days1461-key/etc/ssl/private/ssl-cert-snakeoil.key-out/etc/ssl/certs/ssl-cert-snakeoil.pem
sudo a2enmod ssl
sudo a2ensite default-ssl

Kilka słów komentarza. Pierwsza komenda jest oczywista – instaluje serce naszego LAMP-a czyli Apache HTTP Server. Druga włącza moduł userdir, który pozwala umieszczać pliki stron w katalogach użytkowników ~/public_html/. Dzięki kolejnym możliwe będzie połączenie z naszym serwerem przy pomocy bezpiecznego protokołu https, które przyda nam się choćby przy korzystaniu z phpMyAdmina. Trzecia z kolei komenda wymaga od użytkownika podania kilku informacji, które zostaną zawarte w wygenerowanym certyfikacie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
You are about tobe asked toenter information that will be incorporated
into your certificate request.
What you are about toenter iswhat iscalledaDistinguished Name oraDN.
There are quiteafew fields but you can leave some blank
Forsome fields there will beadefaultvalue,
Ifyou enter'.',the field will be left blank.
Country Name(2letter code)[AU]:PL
State orProvince Name(full name)[Some-State]:Wojewodztwo
Locality Name(eg,city)[]:Miasto
Organization Name(eg,company)[Internet Widgits Pty Ltd]:Firma
Organizational Unit Name(eg,section)[]:Wydzial
Common Name(eg,YOUR name)[]:domena.pl
Email Address[]:[email protected]

PHP

1
2
3
sudo apt-get install php5
sudo nano/etc/apache2/mods-available/php5.conf
sudo/etc/init.d/apache2 force-reload

Tu natomiast pierwsza instrukcja instaluje PHP. Druga wywołuje edytor tekstu, w którym musimy nieco zmodyfikować plik konfiguracyjny, aby móc używać PHP we wcześniej już wspomnianych katalogach użytkowników ~/public_html/. Co mamy zakomentować, jest napisane w samym pliku, więc nie będę tu powtarzać. Ostatnia komenda przeładowuje serwer, aby wystartował on ze wszystkimi zmianami, które wcześniej poczyniliśmy.

W tej chwili możemy przetestować serce naszego LAMP-a – Apache HTTP Server. Odpalamy dowolną przeglądarkę i przechodzimy pod adres http://localhost/ a następnie pod https://localhost/, w obu przypadkach powinniśmy ujrzeć coś takiego:

LAMP działa

LAMP działa

MySQL i phpMyAdmin

1
2
sudo apt-get install mysql-server
sudo apt-get install phpmyadmin

Pierwsza instrukcja instaluje serwer baz danych MySQL, instalator poprosi o ustalenie hasła roota. Druga instalujephpMyAdmin. phpMyAdmin to zestaw skryptów PHP służących do łatwego zarządzania bazą danych MySQL. Umożliwia między innymi tworzenie/usuwanie baz danych, dodawanie/kasowanie relacji oraz edycję ich struktury i zawartości. Wszystkie operacje mogą być wykonywane z poziomu przeglądarki internetowej, w graficznym środowisku, bez konieczności pracy z domyślnym interfejsem tekstowym. Instalator phpMyAdmin poprosi o wybranie serwera www, który zostanie automatycznie skonfigurowany do uruchamiania phpMyAdmin – wybieramy oczywiście apache2, następnie podajemy wcześniej ustalone hasło roota, a kolejne zostawiamy puste, instalator sam wygeneruje hasło dla nowo utworzonego użytkownika phpmyadmin, jego znajomość nie jest nam do szczęścia potrzebna.

phpMyAdmin 3.4.0

phpMyAdmin 3.4.0

To tyle aby LAMP zadziałał, ale pole do zmian konfiguracji jest duże.


TuxOnIce – bezproblemowa hibernacja

4 kwietnia 2011

TuxOnIce, zwany dawniej Suspend2, to rozwiązanie moich problemów z hibernacją, którym chciałbym się z Wami podzielić. Owszem hibernacja u mnie zawsze działała, tzn. Komputer się hibernował i wstawał bez problemów, ale… Mam 8 GB RAM-u, fakt to dużo nawet jak na dzisiejsze czasy, więc zahibernowanie i odhibernowanie musi trwać, no ale bez przesady. Po zainstalowaniu sterowników Catalyst / fglrx, czas odhibernowania komputera spokojnie wystarczał do ugotowania 2-daniowego obiadu icon_wink.Gif%22%20%20alt= Jako, że generalnie lubię po włączeniu komputera mieć dokładnie to co było otwarte przy jego wyłączaniu, zatem zamykanie systemu nie wchodziło w rachubę. Po długich poszukiwaniach znalazłem remedium, a jest nim TuxOnIce.

Autorzy TuxOnIce opisują go w najprostszy sposób, jako ekwiwalent windowsowej funkcji hibernacji, tylko lepszy. No i mają rację! TuxOnIce umożliwia pełny zrzut stanu systemu na partycję wymiany lub nawet do pliku, podczas gdy uswsusp and swsusp zrzucają najwyżej połowę RAM-u. Jak mniemam to właśnie ta cecha powoduje, że po odczytaniu zawartości RAM-u z dysku mam od razu w pełni responsywny system. Zrzut robiony TuxOnIce-em może być kompresowany algorytmem LZF a nawet zaszyfrowany. TuxOnIce wyposażony jest w bardzo estetyczny interfejs tekstowy, który można nawet zamienić w graficzny. Hibernację czy wznowienie ze stanu hibernacji można w każdej chwili przerwać, po zakończeniu hibernacji komputer może się wyłączyć albo zrestartować.Ta ostatnia funkcja przydaje się bardzo, gdy chcemy po zahibernowaniu naszego Ubuntu od razu przeskoczyć do np. Windowsa. Bardzo prosta funkcja, a nie spotkałem się z nią w żadnej implementacji hiberacji czy to dla Linuksa czy Windowsa.

instalacja TuxOnIce w ubuntu

Instalację w systemie Ubuntu przeprowadzamy z repozytoriów PPA for TuxOnIce

1
2
3
sudo add-apt-repository ppa:tuxonice/ppa
sudo apt-get update
sudo apt-get install tuxonice-userui linux-generic-tuxonice linux-headers-generic-tuxonice


vps część 5

March 19, 2012Default, PlanetDebian, Howto, Internet, Programy, Webalizer

Tym razem webalizer, w zasadzie kopia wpisu z nibybloga ale ku pamięci powtórzona u mnie:

apt-get install webalizer

w /etc/apache2/apache2.Conf zmieniamy:

HostnameLookups Off - na On

w /etc/webalizer/webalizer.Conf zmieniamy:

LogFile /var/log/apache2/access.Log1 - na acess.Log
OutputDir /var/www/jakisfolder

Sprawdzamy czy działa:

sudo webalizer

Jeżeli tak to dodajemy do crona bo webalizer sam z siebie nie aktualizuje statystyk:

crontab -e
0 * * * * webalizer

Reset hasła użytkownika root dla MySQL

dodany przez Przemysław Sikora

Pamięć ludzka jest ulotna. Nieraz pewnie zdarzyło się Wam zapomnieć hasła użytkownika root do baz danych. W takim przypadku, nie trzeba się przejmować, bo można je zresetować. Poniżej przedstawiam najprostszy na to sposób. Zacznijmy od zalogowania się jako root na konsoli systemowej.

service mysqld stop

stopujemy nasz serwer bazodanowy

mysqld_safe —skip-grant-tables &

uruchamiamy serwer MySQL z bezpiecznym trybie bez zabezpieczeń

mysql -u root

logujemy się jako root bez hasła

use mysql;

wybieramy bazę danych “mysql”

update user set password=PASSWORD(“nowe-haslo”) where User=’root’;

zmieniamy hasło usera “root” na “nowe-haslo”

flush privileges;

przeładowanie uprawnień, nie przejmujmy się komunikatem błędu w postaci “ERROR 1146 (42S02): Table ‘mysql.Servers’ doesn’t exist”

quit

kończymy zabawę z mysql i wychodzimy

service mysqld start

startujemy nasz serwer bazodanowy


nfs howto

first set up the server

apt-get install nfs-kernel-server
vi /etc/exports
  /folder/you/want/your/remote/box/to/see 192.168.1.0/24(rw,fsid=0,insecure,no_subtree_check,async)
Exportfs -a
Exportfs

if everything worked, you should see an entry like

/folder/you/want/your/remote/box/to/see    192.168.1.0/24

now mount the folder on your client like:

su
apt-get install nfs-common 
mount -t nfs 192.168.1.5:/folder/you/want/your/remote/box/to/see /place/where/you/want/it/mounted/locally
mount

if things went well, you should see an entry like:

192.168.1.5:/ on /place/where/you/mounted/it/locally type nfs (rw,addr=192.168.1.5)

if you want to make it mount automatically every time you boot the client, add a line to /etc/fstab like:

vi /etc/fstab
  192.168.5.115:/folder/you/mounted/on/the/server /place/where/you/want/it/locally   nfs     _netdev,auto  0  0

the _netdev waits until your network comes up before mounting it, the “auto” waits until your system boots up before mounting.


Tworzenie prywatnych certyfikatów.

10.1. Generowanie certyfikatu.

Generowanie prywatnego certyfikatu dla domeny: domena.Pl.

sudo mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
sudo openssl genrsa -des3 -out domena.Pl.Key 1024
Generating RSA private key, 1024 bit long modulus
.......................++++++
.......++++++
e is 65537 (0×10001)
Enter pass phrase for domena.Pl.Key: wpisujemy hasło
Verifying - Enter pass phrase for domena.Pl.Key: ponownie wpisujemy hasło
10.2. Generowanie certyfikatu (Certificate Signing Request).
sudo openssl req -new -key domena.Pl.Key -out domena.Pl.Csr
Enter pass phrase for domena.Pl.Key: wpisujemy hasło
...
...
Country Name (2 letter code) [GB]: wpisujemy np: PL
State or Province Name (full name) [Some-State]: wpisujemy np: Dolny_Slask
Locality Name (eg, city) []: wpisujemy np: Wroclaw
Organization Name (eg, company) []: wpisujemy np: inet
Organizational Unit Name (eg, section) []: wpisujemy np: IT
Common Name (eg, your name or your server’s hostname) []: wpisujemy np: domena.Pl
Email Address []: wpisujemy np: user dot surname at domena dot pl
Please enter the following ‚extra’ attributes
to be sent with your certificate request
A challenge password []: zostawiamy puste
An optional company name []: zostawiamy puste
10.3 Usuwanie hasła z domena.Pl.Key
sudo cp domena.Pl.Key domena.Pl.Key.Org
sudo openssl rsa -in domena.Pl.Key.Org -out domena.Pl.Key

Enter pass phrase for domena.Pl.Key.Org: wpisujemy hasło
writing RSA key


10.4. Generowanie Self-Signed Certificate.


sudo openssl x509 -req -days 365 -in domena.Pl.Csr -signkey domena.Pl.Key -out domena.Pl.Crt

Signature ok
subject=/C=PL/ST=Dolny_Slask/L=Wroclaw/O=inet/OU=IT/CN=domena.Pl
Getting Private key

10.5. Instalacja klucza prywatnego i certyfikatu.

Tworzymy host nasłuchujacy na porcie 80 i 443.
Dodajemy wpis do pliku konfiguracyjnego np /etc/apache2/httpd.Conf:

# HOST NA PORCIE 80
#=================================================================================

ServerName domena.Pl
ServerAdmin webm...@domena.Pl

DocumentRoot /var/www

ErrorLog /var/log/apache2/error.Log
CustomLog /var/log/apache2/access.Log combined

  Order deny,allow
  Allow from all

# Alternatywnie - stałe przekierowanie na port 443.
Redirect permanent / https://domena.Pl/
# HOST NA PORCIE 443
#=================================================================================


Servername domena.Pl
ServerAdmin webm...@domena.Pl
DocumentRoot /var/www

ErrorLog /var/log/apache2/error-ssl.Log
CustomLog /var/log/apache2/access-ssl.Log combined

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/domena.Pl.Crt
SSLCertificateKeyFile /etc/apache2/ssl/domena.Pl.Key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog logs/ssl_request_log \
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


  Order deny,allow
  Allow from all

11. Restart Apache:

sudo /etc/init.D/apache2 restart

Włączanie modułów w Apache takich jak: SSL, rewrite, suexec, include i WebDAV.

sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod suexec
sudo a2enmod include
sudo a2enmod dav_fs
sudo a2enmod dav

Edycja /etc/apache2/mods-available/dir.Conf i zmiana DirectoryIndex.

sudo nano /etc/apache2/mods-available/dir.Conf
          #DirectoryIndex index.Html index.Cgi index.Pl index.Php index.Xhtml index.Htm
          DirectoryIndex index.Html index.Htm index.Shtml index.Cgi index.Php index.Php3 index.Pl index.Xhtml

http://man.Sethuper.Com/instalacja-i-konfiguracja-apache-php5-ruby-python-webdav


Router


This is where the new Ubuntu Router page is in development, please visitUbuntuWirelessRouter/New for more information

1. Setting up an Ubuntu Wired/Wireless Router

1.1. Preface

This article is intended for intermediate and advanced users who would like to set up an Ubuntu installation acting as a router at home or in their office. The end result is a powerful router that can provide functionality similar to popular products (for example, the Linksys WRT54G).

1.2. Scripted wired:wired router

I (user id Snake_Byte) created a python script a while back that sets up a wired router for you given some basic info (check the readme).

Tested on Karmic and Lucid, let me know if you have any problems. I want to start a GUI project to make this simpler, and incorporate wireless features if anyone is interested, we can get a repo going.

You can get it here:

ubuntu router.Tar

1.3. Network Manager

This tool is perfect for simple networking problems, especially for laptop users. It isnot appropriate for setting up a router, even though it does have a very basic internet connection sharing capability.

1.3.1. Typical Example

Home Office

The basis is one PC connected to a broadband internet connection. Additional devices:

  • network printer
  • wifi PDA
  • laptop

Some of these devices should be able to communicate with each other, some should be allowed to communicate with the internet. Some are wired, and some are wireless. With this guide, your PC can share the internet over additional network interfaces, such as wireless cards and ethernet cards.

University

Single PC on a university LAN. Additional devices:

  • X-Box running mythbuntu
  • Wifi mobile phone
  • laptops

1.3.1.1. Quick and Dirty

If you would like to try to do the same thing the 'quick and dirty' way, see EasyRouter, a much quicker method with much less flexibility.

1.4. Technical Overview

The router that will be created is an Internet gateway for wired and/or wireless clients to share an internet connection with one IP address.

The essential components are:

  • routing of packets from your local networks to the internet, with IP_masquerading

  • handling DNS requests
  • providing IP addresses to devices on your local networks (DHCP)

This router can also provide:

  • A firewall
  • port forwarding

2. Prerequisites

2.1. Internet Connection

This is not strictly necessary, but is probably the reason you are following this article. You can set up a router in an isolated network using these instructions, but you will likely have specialist requirements, and need to make changes.

2.2. Router Hardware

2.2.1. Use your desktop PC

If you have a recent PC, bought in the last two years, it probably has enough horsepower to run all your normal applications and act as a router at the same time.

2.2.2. Dedicated Hardware

You'll need a dedicated computer to act as the router. The computer can use old hardware and having the minimum requirements to install Ubuntu should suffice. The author of this article runs his router on a P3 600mhz processor with 256MB of RAM. You are encouraged use this as a server for other applications perhaps by installing postfix, apache, mysql, and/or samba. This guide recommends a server installation of Ubuntu, but there's no reason why a desktop installation wouldn't work. If you plan to be able to access the router remotely, install ssh before proceeding.

The following needs to be physically installed and recognized by the kernel on your router:

  • A network adapter
  • For a wired network,

    • Another network adapter, typically an ethernet port on a motherboard, or PCI card.
  • For a wireless network,

    • A wireless network adapter
      • Ideally it should be able run in "master" mode, although "ad-hoc" mode might be good enough. Cards and chipsets which can work in master mode (otherwise known as access point or ap mode, are listed at the Linux Wireless Project.

      • sudo ip link set dev down && sudo iwconfig mode master should not return an error; but some cards take extra commands to set master mode. Mac80211 compatible drivers can run cards in master mode. Pay careful attention to what hardware you buy.

      • If your wireless network adapter is not recognized by your server installation of Ubuntu, it may use the madwifi chipset (like the D-Link DWL-G520). Please visit Router/Madwifi for more information.

Running ip addr will show you what network interfaces are available.

2.2.3. Terminology

interface is used to mean the operating system's name for a place which sends or receives data packets. It is often, but not necessarily, the same as a device. An interface may have several devices associated (e.G. A bridge), or a single device may have several interfaces. device will refer here to the bit of hardware dealing with your network connections.

3. Internal Network Information

Here are the values we'll use to set up your internal network. Advanced users use caution when changing them as the changes will need to be reflected in all further router configuration.

Firstly, discover the IP address of your internet-connected interface. If you are plugged into a business or academic LAN, this is very likely to be given by:

ip addr show eth0

For a home broadband user, it may be a ppp interface; and a wireless user could have any number of interface names, such as ethX, wlanX, athX, where X is a digit.

Be aware that it is important to use different numbers below to the one given to your internet device. This is probably the case already, but if you are not directly connected to the internet, you may be on a LAN with the same address range. If you already have a broadband router, for example, it might have given you the 192.168.0.2 address, and kept 192.168.0.1 for itself. If so, change the third digit (0) to another number (and do so throughout the rest of this tutorial).

Router

Address

192.168.0.1

Network

192.168.0.0/24

Broadcast

192.168.0.255

Clients

Addresses

192.168.0.2 - 192.168.0.254

Prefix length

/24

Broadcast

192.168.0.255

Gateway

192.168.0.1

4. Setting Up Your Network Interfaces

4.1. Device Naming Overview

Network Device

Internal or External Network

Description

eth0

External

Network adapter connected to an external network (your broadband connection)

eth1

Internal

Network adapter connected to a hub or switch

wlan0

Internal

Wireless network adapter

br0

Internal

Network bridge between eth1 and wlan0 that will treat the two like one device

It is important to note that the names of the network interfaces above (eth0, eth1, and wlan0) are used as convention. It is very likely that your router will recognize its devices under different names (for example, madwifi calls its wireless device ath0). Please substitute the names of your device accordingly. For information about how to change the names of your network devices, try man iftab.

4.2. Taking a Backup

Issue the following command to take a backup of your current network configuration:

  • sudo cp /etc/network/interfaces /etc/network/interfaces.Bak

4.3. Configuring the External Network Interface

4.3.1. Setting up External Network Interface

Here, we configure the Ubuntu networking system to bring the the local loopback and external network interfaces up by editing/etc/networking/interfaces. The primary goal here is to set up your external network interface (eth0, or whatever you're using in place of it) to be brought up by the networking subsystem. The examples below are only for the most basic setups. If your setup requires additional configuration, for example you need to setup ADSL with PPPoE, adapt the following examples so that the end result is your external network interface connected to the Internet.

4.3.1.1. For Dynamic IP Addresses (DHCP) Only

Open /etc/network/interfaces with your favourite editor. Delete everything and paste in what is below. Follow the commented out instructions carefully.

  • # Set up the local loopback interface
    Auto lo
    Iface lo inet loopback
    
    # Set up the external interface
    #
    # Don't forget to change eth0 to the proper name of the external
    # interface if applicable.
    #
    Auto eth0
    Iface eth0 inet dhcp

4.3.1.2. For PPPoE connection with dynamic IP address only

See forum.

4.3.1.3. For Static IP Address Only

Open /etc/network/interfaces with your favourite editor. Delete everything and paste in what is below. Follow the commented out instructions carefully.

  • # Set up the local loopback interface
    Auto lo
    Iface lo inet loopback
    
    # Set up the External interface
    #
    # For every xxx.Xxx.Xxx.Xxx, enter the numeric address given to you
    # by your Internet provider. Don't forget to change eth0 to the proper
    # name of the external interface if applicable.
    #
    Auto eth0
    Iface eth0 inet static
        Address xxx.Xxx.Xxx.Xxx
        Netmask xxx.Xxx.Xxx.Xxx
        Gateway xxx.Xxx.Xxx.Xxx

Now, set up your DNS servers as given to you by your service provider in /etc/resolv.Conf, which should look something like this

  • nameserver xxx.Xxx.Xxx.Xxx
    Nameserver xxx.Xxx.Xxx.Xxx

You can visit the Ubuntu Server Guide - Network Configuration documentation for more information

4.3.2. Testing Connectivity

Reload the network configuration and test for connectivity,

  • sudo /etc/init.D/networking restart
    Ping -c 3 -W 10 ubuntu.Com

And if all goes well something similar should return:

  • PING ubuntu.Com (82.211.81.166) 56(84) bytes of data.
    64 bytes from signey.Ubuntu.Com (82.211.81.166): icmp_seq=1 ttl=43 time=99.9 ms
    64 bytes from signey.Ubuntu.Com (82.211.81.166): icmp_seq=2 ttl=43 time=109 ms
    64 bytes from signey.Ubuntu.Com (82.211.81.166): icmp_seq=3 ttl=43 time=100 ms
    
    --- ubuntu.Com ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2001ms
    Rtt min/avg/max/mdev = 99.982/103.450/109.419/4.254 ms

4.4. Configuring the Internal Network Interfaces

4.4.1. Wired Only

Append the following to /etc/network/interfaces and follow the commented out instructions carefully.

  • # Set up the internal wired network
    #
    # Don't forget to change eth1 to the proper name of the internal
    # wired network interface if applicable.
    #
    Auto eth1
    Iface eth1 inet static
        Address 192.168.0.1
        Network 192.168.0.0
        Netmask 255.255.255.0
        Broadcast 192.168.0.255

Your internal network interface is: eth1 (or whatever you're using in place of it)

4.4.2. Wireless Only

If you plan on using WEP, generate a network key,

  • dd if=/dev/random bs=1 count=13 2>/dev/null | xxd -p

Append the following to /etc/network/interfaces and follow the commented out instructions carefully.

  • # Set up the internal wireless network
    #
    # Don't forget to change wlan0 to the proper name of the internal
    # wireless network interface if applicable.
    #
    # If you would like to use WEP, uncomment the line 'wireless-key'
    # and replace '' with a WEP key.
    # 
    # You may also change the network essid and channel.
    #
    Auto wlan0
    Iface wlan0 inet static
        Wireless-mode master
        Wireless-essid "UbuntuWireless"
        Wireless-channel 1
        #wireless-key 
        Address 192.168.0.1
        Network 192.168.0.0
        Netmask 255.255.255.0
        Broadcast 192.168.0.255

Your internal network interface is: wlan0 (or whatever you're using in place of it)

4.4.3. Both Wired and Wireless

First install the necessary tools to create a network bridge,

  • sudo apt-get install bridge-utils

If you plan on using WEP, generate a network key,

  • dd if=/dev/random bs=1 count=13 2>/dev/null | xxd -p

Append the following to /etc/network/interfaces and follow the commented out instructions carefully.

  • # Set up the internal wireless network
    #
    # Don't forget to change wlan0 to the proper name of the internal
    # wireless network interface if applicable.
    #
    # If you would like to use WEP, uncomment the line 'wireless-key'
    # and replace '' with a WEP key.
    # 
    # You may also change the network essid and channel.
    #
    Auto wlan0
    Iface wlan0 inet manual
        Wireless-mode master
        Wireless-essid "UbuntuWireless"
        Wireless-channel 1
        #wireless-key 
    
    # Set up the internal wired network
    #
    # It's not necessary to bring this interface up as the bridge
    # we are about to create does this. Leave these lines commented.
    #
    #auto eth1
    #iface eth1 inet manual
    
    
    # Set up the internal wired/wireless network bridge
    #
    # Don't forget to change wlan0 and eth1 to the proper name of
    # the internal wired and wireless interfaces if applicable.
    #
    Auto br0
    Iface br0 inet static
        Address 192.168.0.1
        Network 192.168.0.0
        Netmask 255.255.255.0
        Broadcast 192.168.0.255
        Bridge-ports eth1 wlan0

Your internal network interface is: br0

4.5. Enable IP forwarding and Masquerading

Doing the above might not be enough to make the Ubuntu machine a real router which does NAT (Network Address Translation) and IP Forwarding. The following script configures the Kernel IPTable and IP forwarding. You will have to configure at least the script's 2 variables; the 1st is the external network interface; the 2nd is the internal network interface.

  • EXTIF="eth0"
    INTIF="eth1"

The script was originally from a Ubuntu router guide forum article which has 2 internal network interfaces. What's showing below uses only 1 internal network interface. You will have to modify the script manually or use the script in the Ubuntu router guide forum article if you need to configure 2 internal network interfaces.

  • echo -e "\n\nLoading simple rc.Firewall-iptables version $FWVER..\n"
    DEPMOD=/sbin/depmod
    MODPROBE=/sbin/modprobe
    
    EXTIF="eth0"
    INTIF="eth1"
    #INTIF2="eth0"
    Echo "   External Interface:  $EXTIF"
    Echo "   Internal Interface:  $INTIF"
    
    #======================================================================
    #== No editing beyond this line is required for initial MASQ testing == 
    Echo -en "   loading modules: "
    Echo "  - Verifying that all kernel modules are ok"
    $DEPMOD -a
    Echo "----------------------------------------------------------------------"
    Echo -en "ip_tables, "
    $MODPROBE ip_tables
    Echo -en "nf_conntrack, " 
    $MODPROBE nf_conntrack
    Echo -en "nf_conntrack_ftp, " 
    $MODPROBE nf_conntrack_ftp
    Echo -en "nf_conntrack_irc, " 
    $MODPROBE nf_conntrack_irc
    Echo -en "iptable_nat, "
    $MODPROBE iptable_nat
    Echo -en "nf_nat_ftp, "
    $MODPROBE nf_nat_ftp
    Echo "----------------------------------------------------------------------"
    Echo -e "   Done loading modules.\n"
    Echo "   Enabling forwarding.."
    Echo "1" > /proc/sys/net/ipv4/ip_forward
    Echo "   Enabling DynamicAddr.."
    Echo "1" > /proc/sys/net/ipv4/ip_dynaddr 
    Echo "   Clearing any existing rules and setting default policy.."
    
    Iptables-restore <-eof>*nat
    -A POSTROUTING -o "$EXTIF" -j MASQUERADE
    COMMIT
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]
    -A FORWARD -i "$EXTIF" -o "$INTIF" -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 
    -A FORWARD -i "$INTIF" -o "$EXTIF" -j ACCEPT
    -A FORWARD -j LOG
    COMMIT
    EOF
    
    Echo -e "\nrc.Firewall-iptables v$FWVER done.\n"-eof>

After configuring the 2 variables, save the script below as nat.Sh and make it executable by doing

  • chmod a+x nat.Sh

Now, test the script by running as root

  • sudo sh nat.Sh

Investigate the messages from the console output to see if any error happened. If everything looks fine, use another host in the internal network to test if it can access the external network (presumably the Internet). A quick way to test is pinging Google public DNS from the console.

  • ping -c 3 -W 10 8.8.8.8

If ping responds, make our new script bootable so we don't have to run the script every time we restart.

  • sudo cp nat.Sh /etc/init.D/
    Sudo ln -s /etc/init.D/nat.Sh /etc/rc2.D/S95masquradescript

As a final test, restart your computer and test to see if you still have the same functionality. If so then congratulations! If not then make sure you followed the above correctly so the script is bootable.

5. Firewall

See Router/Firewall

6. DHCP and DNS

Dynamic Host Configuration Protocol (DHCP)

CategoryNetworking

Instalacja i konfiguracja Apache, PHP5, Ruby, Python, CGI, WebDAV Ubuntu/Debian

Linux, Sieć

Spis treści [ukryj]

Instalacja i konfiguracja Apache, PHP5, Ruby, Python, CGI, WebDAV Ubuntu/Debian

1. Instalacja Apache.

sudo aptitude install apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2-suexec libexpat1 ssl-cert

2. Instalacja PHP5, Ruby i Python (jako moduły do Apache).


sudo aptitude install libapache2-mod-php5 libapache2-mod-ruby libapache2-mod-python php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

3. Edycja /etc/apache2/mods-available/dir.Conf i zmiana DirectoryIndex.

sudo nano /etc/apache2/mods-available/dir.Conf
          #DirectoryIndex index.Html index.Cgi index.Pl index.Php index.Xhtml index.Htm
          DirectoryIndex index.Html index.Htm index.Shtml index.Cgi index.Php index.Php3 index.Pl index.Xhtml

4. Włączanie modułów w Apache takich jak: SSL, rewrite, suexec, include i WebDAV.

sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod suexec
sudo a2enmod include
sudo a2enmod dav_fs
sudo a2enmod dav

5. Restart Apache:

sudo /etc/init.D/apache2 restart

Testujemy serwer

http://127.0.0.1/

6. Test PHP.

Tworzymy plik index.Php aby przetestować działanie serwera i zapisujemy go w /var/www/.

sudo nano /var/www/index.Php

Zmieniamy uprawnienia do pliku index.Php

sudo chmod 755 /var/www/index.Php

Restart Apache2.

sudo /etc/init.D/apache2 restart

i testujemy w przeglądarce:

http://127.0.0.1/index.Php

index-php

7. Włączanie skryptów CGI

Edytujemy plik /etc/apache2/mods-enabled/mime.Conf i usuwamy hash


nano /etc/apache2/mods-enabled/mime.Conf
[...]
#AddHandler cgi-script .Cgi .Pl
[...]

Tworzymy plik index.Cgi aby przetestować działanie serwera i zapisujemy go w /var/www/.

sudo nano /var/www/index.Cgi
#!/usr/bin/perl
# test.Cgi by Bill Weinman [http://bw.Org/]
# Copyright 1995-2008 The BearHeart Group, LLC
# Free Software: Use and distribution under the same terms as perl.

Use strict;
Use warnings;
Use CGI;

Print foreach (
    "Content-Type: text/plain\n\n",
    "BW Test version 5.0\n",
    "Copyright 1995-2008 The BearHeart Group, LLC\n\n",
    "Versions:\n=================\n",
    "perl: $]\n",
    "CGI: $CGI::VERSION\n"
);

My $q = CGI::Vars();
Print "\nCGI Values:\n=================\n";
Foreach my $k ( sort keys %$q ) {
    Print "$k [$q->{$k}]\n";
}

Print "\nEnvironment Variables:\n=================\n";
Foreach my $k ( sort keys %ENV ) {
    Print "$k [$ENV{$k}]\n";
}

Zmieniamy uprawnienia do pliku index.Cgi

sudo chmod 755 /var/www/index.Cgi

Restart Apache

sudo /etc/init.D/apache2 restart

i testujemy w przeglądarce

http://127.0.0.1/index.Cgi

index-cgi

8. Jeśli masz zamiar zarządzać serwerem za pomocą ISPConfig wykonaj następujące czynności

Aby wszyskie pliki Ruby były wykonywane i wyświetlane poprawnie (.Rbx i .Rb) w pliku konfiguracyjnym /etc/mime.Types musimy odblokować linię usuwając hash.

sudo nano /etc/mime.Types
[...]
#application/x-ruby                             rb
[...]

9. Wyłączanie globalnych ustawień PHP

Zarządzając serwerem z panela kontrolnego ISPConfig przy wyłączonych globalnych ustawieniach PHP, możesz zdecydować które strony mogą wykonywać skrypty PHP a które nie.
W przeciwnym wypadku wszystkie strony będą mogły uruchomić skrypty ignorując ustawienia w panelu kontrolnym.

Aby wyłączyć te ustawienia edytujemy plik /etc/mime.Types i usuwamy hashe:

sudo nano /etc/mime.Types
[...]
#application/x-httpd-php                        phtml pht php
#application/x-httpd-php-source                 phps
#application/x-httpd-php3                       php3
#application/x-httpd-php3-preprocessed          php3p
#application/x-httpd-php4                       php4
#application/x-httpd-php5                       php5
[...]

Następnie edytujemy plik /etc/apache2/mods-enabled/php5.Conf i usuwamy hash w linii SetHandler:

sudo nano /etc/apache2/mods-enabled/php5.Conf
    
        #SetHandler application/x-httpd-php
    
    
        #SetHandler application/x-httpd-php-source
    
    # To re-enable php in user directories comment the following lines
    # (from  to .) Do NOT set it to On as it
    # prevents .Htaccess files from disabling it.
    
        
            Php_admin_value engine Off
        
    

10. Tworzenie prywatnych certyfikatów.

10.1. Generowanie certyfikatu.

Generowanie prywatnego certyfikatu dla domeny: domena.Pl.

sudo mkdir /etc/apache2/sslcd /etc/apache2/sslsudo openssl genrsa -des3 -out domena.Pl.Key 1024Generating RSA private key, 1024 bit long modulus
.......................++++++
.......++++++
e is 65537 (0×10001)
Enter pass phrase for domena.Pl.Key: wpisujemy hasło
Verifying - Enter pass phrase for domena.Pl.Key: ponownie wpisujemy hasło
10.2. Generowanie certyfikatu (Certificate Signing Request).
sudo openssl req -new -key domena.Pl.Key -out domena.Pl.CsrEnter pass phrase for domena.Pl.Key: wpisujemy hasło
...
...
Country Name (2 letter code) [GB]: wpisujemy np: PL
State or Province Name (full name) [Some-State]: wpisujemy np: Dolny_Slask
Locality Name (eg, city) []: wpisujemy np: Wroclaw
Organization Name (eg, company) []: wpisujemy np: inet
Organizational Unit Name (eg, section) []: wpisujemy np: IT
Common Name (eg, your name or your server’s hostname) []: wpisujemy np: domena.Pl
Email Address []: wpisujemy np: user dot surname at domena dot pl
Please enter the following ‚extra’ attributes
to be sent with your certificate request
A challenge password []: zostawiamy puste
An optional company name []: zostawiamy puste
10.3 Usuwanie hasła z domena.Pl.Key
sudo cp domena.Pl.Key domena.Pl.Key.Orgsudo openssl rsa -in domena.Pl.Key.Org -out domena.Pl.KeyEnter pass phrase for domena.Pl.Key.Org: wpisujemy hasło
writing RSA key
10.4. Generowanie Self-Signed Certificate.

sudo openssl x509 -req -days 365 -in domena.Pl.Csr -signkey domena.Pl.Key -out domena.Pl.CrtSignature ok
subject=/C=PL/ST=Dolny_Slask/L=Wroclaw/O=inet/OU=IT/CN=domena.Pl
Getting Private key
10.5. Instalacja klucza prywatnego i certyfikatu.

Tworzymy host nasłuchujacy na porcie 80 i 443.
Dodajemy wpis do pliku konfiguracyjnego np /etc/apache2/httpd.Conf:

# HOST NA PORCIE 80
#=================================================================================

ServerName domena.Pl
ServerAdmin webm...@domena.Pl

DocumentRoot /var/www

ErrorLog /var/log/apache2/error.Log
CustomLog /var/log/apache2/access.Log combined

  Order deny,allow
  Allow from all

# Alternatywnie - stałe przekierowanie na port 443.
Redirect permanent / https://domena.Pl/
# HOST NA PORCIE 443
#=================================================================================


Servername domena.Pl
ServerAdmin webm...@domena.Pl
DocumentRoot /var/www

ErrorLog /var/log/apache2/error-ssl.Log
CustomLog /var/log/apache2/access-ssl.Log combined

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/domena.Pl.Crt
SSLCertificateKeyFile /etc/apache2/ssl/domena.Pl.Key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog logs/ssl_request_log \
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


  Order deny,allow
  Allow from all

11. Restart Apache:

sudo /etc/init.D/apache2 restart

Instalacja i Konfiguracja Roundcube Ubuntu/Debian

Linux

Instalacja i Konfiguracja Roundcube Ubuntu/Debian

Instalacja RoundCube interfejsu graficznego na serwer www podobny do systemu yahoo mai, poczta na wp, onet czy hotmail.

Wymagania:

Przykładowa konfiguracja.

RoundCube Serwer WWW
- www.Serwer.Pol

Serwer SMTP/IMAP
- mail.Serwer.Pol


# Zaczynamy od instalacji potrzebnych pakietów


sudo aptitude -y install roundcube roundcube-mysql


# Odpowiedz „Yes” jeśli zostaniesz zapytany o potwierdzenie

# Wybierz bazę danych którą będziesz później używał. „MySQL”

# Wpisz hasło root’a do bazy MySQL

# Wpisz hasło dla bazy danych RoundCube DB

# Weryfikacja hasła



# Edytujemy plik konfiguracyjny:


sudo nano /etc/roundcube/main.Inc.Php
# linia 66: Określanie serwera IMAP (SSL):
 $rcmail_config['default_host'] = 'ssl://mail.Serwer.Pol';

# linia 69: Określanie portu serwera IMAP (SSL):
 $rcmail_config['default_port'] =993;

# linia 87: Określanie nazwy domeny:
 $rcmail_config['mail_domain'] = 'serwer.Pol';

# linia 102: Określanie serwera SMTP (SSL):
 $rcmail_config['smtp_server'] = 'ssl://mail.Serwer.Pol';

# linia 105: Określanie portu serwera SMTP (SSL):
 $rcmail_config['smtp_port'] =465;

# linia 109: Użycie tej samej nazwy użytkownika do autoryzacji protokołu SMTP i IMAP:
 $rcmail_config['smtp_user'] = '%u';

# linia 113: Użycie tego samego hasła do autoryzacji protokołu SMTP i IMAP:
 $rcmail_config['smtp_pass'] = '%p';

# linia 123: Określanie hosta SMTP HELO:
 $rcmail_config['smtp_helo_host'] = 'mail.Serwer.Pol';

# linia 168: zmiana języka:
 $rcmail_config['language'] = 'pl_PL';

# linia 180: zmiana UserAgent:
 $rcmail_config['useragent'] = 'Server World Webmail';

# linia 183: Zmiana tytułu:
 $rcmail_config['product_name'] = 'Server World Webmail';

# linia 218: Zmiana kodowania:
 $rcmail_config['default_charset'] = 'UTF-8';


# Następnie edytujemy apache.Conf.


sudo nano /etc/roundcube/apache.Conf
# linia 4: usuwamy '#' przy:
  Alias /roundcube /var/lib/roundcube


# Restartujemy serwer Apache2.

sudo /etc/init.D/apache2 restart

* Restarting web server apache2
... Waiting ...Done.


Dostęp do strony:

http://(nazwa serwera albo adres IP)/roundcube/
UWAGA

Może okazać się że roundcube nie będzie działał poprawnie.
Zdarza się, że po aktualizacji php nagle coś nie działa, nie można połączyć się z serwerem lub powstają inne problemy i błędy.

Co należy zrobić:


Reinstalacja PHP5 (php5.3.3.7):

sudo apt-get remove --purge php5 && apt-get update && apt-get install php5


Wyłączanie sesji szyfrowania Suhosin

Edytujemy plik konfiguracyjny suhosin.Ini

sudo nano /etc/php5/apache2/conf.D/suhosin.Ini


Należy odnaleźć linię ” suhosin.Session.Encrypt = off „
i usunąć średnik ” ; „ przed tym wpisem.
Upewniamy się że po znaku równości jest wpis ” off „ (w niektórych przypadkach ” 0 „).
Żródło: http://www.Server-world.Info/en/note?Os=Ubuntu_10.04&p=httpd&f=14

Postfix + SASL + TLS (SMTP-AUTH) Debian/Ubuntu

Linux, Sieć

Postfix + SASL + TLS (SMTP-AUTH) Debian/Ubuntu

Instalacja i konfiguracja SASL.

sudo apt-get install libsasl2 sasl2-bin libsasl2-modules postfix-tls

Konfiguracja SASL.

Edycja pliku konfiguracyjnego /etc/default/saslauthd.

sudo nano /etc/default/saslauthd
START=yes
PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR}"
PIDFILE="${PWDIR}/saslauthd.Pid"
MECHANISMS="pam"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Nadpisujemy uprawnienia do pliku /var/spool/postfix/var/run/saslauthd.


sudo dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd

Tworzenie pliku konfiguracyjnego smtp.Conf.

sudo touch /etc/postfix/sasl/smtpd.Confsudo nano /etc/postfix/sasl/smtpd.Conf
#saslauthd_version: 2
Pwcheck_method: saslauthd
Mech_list: PLAIN LOGIN

Dodanie użytkownika sasl.

adduser postfix sasl

Uruchamiamy SASL.

/etc/init.D/saslauthd start
Testujemy Działanie programu.
testsaslauthd -u użytkownik -p hasło -f /var/spool/postfix/var/run/saslauthd/mux

Możliwe jest dodanie dodatkowych opcji do parametru mech_list takich jak cram-md5 czy digest-md5.

Edytujemy plik konfiguracyjny postfixa /etc/postfix/main.Cf i dodajemy następujące parametry:

sudo nano /etc/postfix/main.Cf
# sasl support for relaying mails
Smtpd_sasl_auth_enable = yes
Smtpd_sasl_security_options = noanonymous
Smtpd_sasl_local_domain =
Smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, check_relay_domains

Restartujemy postfixa:

sudo /etc/init.D/postfix restart


Testowanie połączenia:

telnet localhost 25
Trying localhost...
Connected to localhost.
Escape character is '^]'.
220 [domain.Com, loclhost] ESMTP Postfix

Wpisujemy ehlo localhost

ehlo localhost
250-[domain.Com, loclhost]
...
250-AUTH PLAIN LOGIN
...

Linia 250-AUTH powinna pokazywać dostępne mechanizmy, które były zdefiniowane w pliku smtpd.Conf (PLAIN LOGIN).

Uwaga!
Jeśli sasldb2 nie został zainstalowany poprawnie tzn. Z jakiegoś powodu nie znajduje się w chroot jail musimy wykonać następujące comendy:


sudo cp /etc/sasldb2 /var/spool/postfix/etc/sudo chown root:sasl /var/spool/postfix/etc/sasldb2sudo chmod 660 /var/spool/postfix/etc/sasldb2sudo sed -i -e ‚s/\(sasl:.*\)/\1postfix/g’ /etc/group

„Instalacja” TLS

Edytujemy plik konfiguracyjny postfixa /etc/postfix/main.Cf i dopisujemy następujące parametry:

sudo nano /etc/postfix/main.Cf
# Parametry TLS
Smtpd_tls_auth_only = yes
Smtp_use_tls = yes
Smtpd_use_tls = yes
Smtp_tls_note_starttls_offer = yes
Smtpd_tls_key_file = /etc/postfix/ssl/smtpd.Key
Smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.Crt
Smtpd_tls_CAfile = /etc/postfix/ssl/cacert.Pem
Smtpd_tls_loglevel = 1
Smtpd_tls_received_header = yes
Smtpd_tls_session_cache_timeout = 3600s
Tls_random_source = dev:/dev/urandom

Generacja kluczy TLS (na około 10 lat)

sudo mkdir /etc/postfix/sslcd /etc/postfix/ssl/sudo openssl genrsa -des3 -rand /etc/hosts -out smtpd.Key 1024sudo chmod 600 smtpd.Keysudo openssl req -new -key smtpd.Key -out smtpd.Csrsudo openssl x509 -req -days 3650 -in smtpd.Csr -signkey smtpd.Key -out smtpd.Crtsudo openssl rsa -in smtpd.Key -out smtpd.Key.Unencryptedsudo mv -f smtpd.Key.Unencrypted smtpd.Keysudo openssl req -new -x509 -extensions v3_ca -keyout cakey.Pem -out cacert.Pem -days 3650


Poprawne połączenie się klienta do serwera:

Feb 22 06:41:11 ns35748 postfix/smtpd[22745]: connect from artima.Com[63.246.23.132]
Feb 22 06:41:11 ns35748 postfix/smtpd[22745]: setting up TLS connection from artima.Com[63.246.23.132]
Feb 22 06:41:11 ns35748 postfix/smtpd[22745]: TLS connection established from artima.Com[63.246.23.132]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)

Jeśli wszystko zostało poprawnie skonfigurowane to wynik naszej pracy powinien wyglądać jak poniżej:

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [domain.Com, loclhost] ESMTP Postfix
ehlo localhost
250-[IP lub domena]
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Jak widać opcja 250-STARTTLS została nam zaoferowana.

Konfiguracja klientów

Edytujemy plik konfiguracyjny postfixa /etc/postfix/main.Cf i dodajemy następujące parametry:

sudo nano /etc/postfix/main.Cf
smtp_sasl_auth_enable = yes
Smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
Smtp_sasl_type = cyrus
Smtp_sasl_security_options = noanonymous
Smtp_tls_loglevel = 0

Tworzymy i edytujemy plik sasl_passwd..


sudo touch /etc/postfix/sasl/sasl_passwdsudo nano /etc/postfix/sasl/sasl_passwd


..I dodajemy użytkowników do autoryzacji:

domena.Com użytkownik1:hasło1
Domena.Com użytkownik2:hasło2
Domena.Com użytkownik3:hasło3

Restartujemy postfix’a i sasl’a.

sudo /etc/init.D/postfix restartsudo /etc/init.D/saslauthd restart

MySQL - instalacja i konfiguracja - HOWTO na szybko - Debian 6

Linux, Sieć

MySQL - instalacja i konfiguracja - Debian 6

Instalacja serwera MySQL.


sudo apt-get install mysql-server mysql-client libmysqlclient-dev mysql-common php5-mysql


W czasie instalacji serwera MySQL powinniśmy być zapytani o podanie hasła do konta administratora (root’a):

New password for the MySQL „root” user: <= „hasło="">=>
Repeat password for the MySQL „root” user: <= „hasło="">=>

Jeśli instalator serwera MySQL pominie konfigurację tego etapu lub z jakiegoś powodu nie pojawi się na ekranie w czasie instalacji, powinniśmy zaraz po zakończaniu instalacji stworzyć ręcznie hasło administratora.

sudo mysqladmin -u root -h localhost -p(hasło)

lub

sudo mysqladmin -u root -h (nazwa_hosta) -p(hasło)

lub

sudo mysql -u root -p

Konfiguracja serwera MySQL.

Jeżeli w naszej sieci posiadamy więcej niż jeden serwer, a serwer na którym instalujemy aplikację MySQL ma być tylko serwerem baz danych, należy edytować plik konfiguracyjny /etc/mysql/my.Cnf odszukać i wstawić hash przy bind-address.
W ten sposób serwer będzie nasłuchiwał na wszystkich adresach IP.

sudo /etc/mysql/my.Cnf
#bind-address = 127.0.0.1

Restart serwera MySQL.

sudo /etc/init.D/mysql restart

Test nasłuchiwania serwera MySQL.

sudo netstat -tap | grep mysql
tcp      0     0    *:mysql         *:*               LISTEN      1216/mysqld

MySQL z pod konsoli (na szybko).

Tworzenie nowej bazy danych.


sudo mysqladmin create nazwa_bazy_danych -u root -pEnter password: hasło_root

Archiwizacja i przywracanie baz danych (z lini komend).

Przykład archiwizacji bazy danych „BAZA_DANYCH” z uzyciem użytkownika root bez hasła:

sudo mysqldump -u root -p BAZA_DANYCH > BAZA_DANYCH.Sql

Przykład archiwizacji określonych tabel bazy danych „JAKAS_BAZA_DANYCH”:
tabele np:

  • php_cms
  • aps_cms
sudo mysqldump -u root -p BAZA_DANYCH php_cms aps_cms > tabele_BAZA_DANYCH.Sql


Każda nazwa tabeli musi być odzielona spacją.

Przykład archiwizacji więcej niż jedna baza danych na raz.
W tym przypadku można użyć opcji --database.
baza danych np:

  • Tutorials
  • Articles
  • Comments
sudo mysqldump -u root -p --databases Tutorials Articles Comments > KILKA_BAZA_DANYCH.Sql

Każda nazwa tabeli musi być odzielona spacją.

Przykład archiwizacji wszystkich baz danych w tym samym czasie.
Należy użyć opcję --all-database.

sudo mysqldump -u root -p --all-databases > WSZYSTKIE_BAZY_DANYCH.Sql

Polecenie mysqldump ma także kilka innych przydatnych opcji:

  • --add-drop-table: funkcja ta informuje MySQL, aby dodać do zrzutu instrukcjię DROP TABLE przed każdym CREATE TABLE.
  • --no-data: Zrzucenie tylko struktury bazy danych, a nie zawartości.
  • --add-locks: Dodaje oświadczenia LOCK TABLES i UNLOCK TABLES.

Przykład archiwizacji bazy danych - plik wyjściowy skompresowany.

Archiwizacja i kompresja bazy danych pliku do „gzip”.

sudo mysqldump -u root -p BAZA_DANYCH | gzip -9 > BAZA_DANYCH.Sql.Gz


Wyodrębnianie spakowanego pliku gz:

sudo gunzip BAZA_DANYCH.Sql.Gz

Przywracanie zarchiwizoanych baz danych MySQL.

Przywracanie bazy danych JAKAS_BAZA_DANYCH.Sql.
Aby móc przywrócić bazę danych musimy upewnić się że:

  • Nazwa bazy danych „JAKAS_BAZA_DANYCH” jest założona,
  • Załadować plik za pomocą polecenia mysql:
sudo mysql -u root -p BAZA_DANYCH <>

Przywracanie zarchiwizoanych tabeli bazy danych np: tabele_JAKAS_BAZA_DANYCH do bazy danych JAKAS_BAZA_DANYCH.

sudo mysqldump -u root -p BAZA_DANYCH <>

Przywracanie zarchiwizoanej skompresowanej bazy danych.

sudo gunzip < baza_danych.Sql.Gz="" |="" mysql="" -u="" root="" -p="">

Przywracanie bazy danych MySQL i nadpisanie istniejącej.


sudo mysqlimport -u root -p BAZA_DANYCH BAZA_DANYCH.Sql


Tworzenie nowego użytkownika.

Używanie konta administratora root do zarządzania bazą danych jest dość niebezpieczne.
Zalecane jest tworzenie kont użytkowników z uprawnieniami tylko do jednej konkretnej bazy danych.

sudo mysql -u root -pEnter password: hasło_root

Serwer MySQL posiada własną bazę danych o nazwie mysql, w której zawartę są informacje na temat:
baz danych, uprawnień, użytkowników...

Tworzenie nowego konta.

User = nazwa_uzytkownia,
Host = localhost,
Password=PASSWORD = hasło_użytkownika,

mysql> USE mysql;Database changedmysql> INSERT INTO user set Host=’localhost‚, User=’nazwa_uzytkownia‚, Password=PASSWORD(‚hasło_użytkownika‚);Query OK, 1 row affected, 3 warnings (0.04 sec)

Przeładowanie uprawnień.

mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.02 sec)

Nadanie uprawnień użytkownikowi do bazy danych.

mysql> GRANT Select,Insert,Update,Delete,Create,Drop ON nazwa_bazy_danych.* TO nazwa_użytkownika@localhost;Query OK, 0 rows affected (0.03 sec)

Ponowne przeładowanie uprawnień.

mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)

Logowanie się bezpośrednio do konkretnej bazy danych:

mysql -u root -p NAZWA_BAZY_DANYCH

Usuwanie bazy danych:

mysql> drop database NAZWA_BAZY_DANYCH;

Naprawa bazy danych:
Przykład bazy danych - wordpress.
Tabela bazy danych - wordpress.Wp_posts

sudo mysql -u root -p wordpressmysql> show databases;mysql> use wordpress;mysql> show databases;


Sprawdzanie bazy danych.

mysql> check table wordpress.Wp_posts;


Naprawa Bazy danych.

mysql> repair table wordpress.Wp_posts;


Ponowne sprawdzanie bazy danych.

mysql> check table wordpress.Wp_posts;

lub

Przykład bazy danych - wordpress.
Sprawdzanie bazy danych:

mysqlcheck -u nazwa_uzytkownia -p wordpress
wordpress.Wp_ak_twitter                     OK
Wordpress.Wp_commentmeta                    OK
Wordpress.Wp_comments                       OK
Wordpress.Wp_links                          OK
Wordpress.Wp_options                        OK
Wordpress.Wp_postmeta                       OK
Wordpress.Wp_posts
warning : Table is marked as crashed error : Size of datafile is: 745472 Should be: 745692 error : Corrupt
Wordpress.Wp_term_relationships             OK
Wordpress.Wp_term_taxonomy                  OK
Wordpress.Wp_terms                          OK
Wordpress.Wp_usermeta                       OK
Wordpress.Wp_users                          OK

Usuwanie usterek, naprawa bazy danych:

mysqlcheck -u nazwa_uzytkownia -p --auto-repair
wordpress.Wp_ak_twitter                      OK
Wordpress.Wp_commentmeta                     OK
Wordpress.Wp_comments                        OK
Wordpress.Wp_links                           OK
Wordpress.Wp_options                         OK
Wordpress.Wp_postmeta                        OK
Wordpress.Wp_posts  warning : Table is marked as crashed  error : Size of datafile is: 745472 Should be: 745692  error : Corrupt
Wordpress.Wp_term_relationships              OK
Wordpress.Wp_term_taxonomy                   OK
Wordpress.Wp_terms                           OK
Wordpress.Wp_usermeta                        OK
Wordpress.Wp_users                           OK

Repairing tables wordpress.Wp_posts info : Found block that points outside data file at 742932 status : OK 

Wyjście z konsoli MySQL.

mysql> quitBye

Numeracja masek podsieci

Linux, Sieć

Numeracja masek podsieci

Skrócona
maska podsieci CIDR Maska
podsieci Ilość adresów IP
na maskę podsieci
/20 255.255.240.0 4096/21 255.255.248.0 2048/22 255.255.252.0 1024/23 255.255.254.0 512/24 255.255.255.0 256/25 255.255.255.128 128/26 255.255.255.192 64/27 255.255.255.224 32/28 255.255.255.240 16/29 255.255.255.248 8/30 255.255.255.252 4

Przykład:

192.168.1.0/25 zawiera adresy pomiędzy 192.168.1.0 i 192.168.1.127

192.168.1.128/25 zawiera adresy pomiędzy 192.168.1.128 i 192.168.1.255


Tabela masek podsieci

Maska podsieci = /24

0-255

Maska podsieci = /25

0-127
128-255

Maska podsieci = /26

0-63
64-127
128-191
192-255

Maska podsieci = /27

0-31
32-63
64-95
96-127
128-159
160-191
192-223
224-255

Maska podsieci = /28

0-15
16-31
32-47
48-63
64-79
80-95
96-111
112-127
128-143
144-159
160-175
176-191
192-207
208-223
224-239
240-255

Maska podsieci = /29

 0-7
8-15
16-23
24-31
32-39
40-47
48-55
56-63
64-71
72-79
80-87
88-95
96-103
104-111
112-119
120-127
128-135
136-143
144-151
152-159
160-167
168-175
176-183
184-191
192-199
200-207
208-215
216-223
224-231
232-239
240-247
248-255

Maska podsieci = /30

0-3
4-7
8-11
12-15
16-19
20-23
24-27
28-31
32-35
36-39
40-43
44-47
48-51
52-55
56-59
60-63
64-67
68-71
72-75
76-79
80-83
84-87
88-91
92-95
96-99
100-103
104-107
108-111
112-115
116-119
120-123
124-127
128-131
132-135
136-139
140-143
144-147
148-151
152-155
156-159
160-163
164-167
168-171
172-175
176-179
180-183
184-187
188-191
192-195
196-199
200-203
204-207
208-211
212-215
216-219
220-223
224-227
228-231
232-235
236-239
240-243
244-247
248-251
252-255

Netmaski

Maska Podsieci         Maska Podsieci (binarna)       CIDR      Opis
255.255.255.255  11111111.11111111.11111111.11111111  /32  Host (poj.Adres)
255.255.255.254  11111111.11111111.11111111.11111110  /31  bezużyteczne
255.255.255.252  11111111.11111111.11111111.11111100  /30    2  użytkowe
255.255.255.248  11111111.11111111.11111111.11111000  /29    6  użytkowe
255.255.255.240  11111111.11111111.11111111.11110000  /28   14  użytkowe
255.255.255.224  11111111.11111111.11111111.11100000  /27   30  użytkowe
255.255.255.192  11111111.11111111.11111111.11000000  /26   62  użytkowe
255.255.255.128  11111111.11111111.11111111.10000000  /25  126  użytkowe
255.255.255.0    11111111.11111111.11111111.00000000  /24 "Klasa C" 254 użytkowe
255.255.254.0    11111111.11111111.11111110.00000000  /23    2  Klasa C
255.255.252.0    11111111.11111111.11111100.00000000  /22    4  Klasa C
255.255.248.0    11111111.11111111.11111000.00000000  /21    8  Klasa C
255.255.240.0    11111111.11111111.11110000.00000000  /20   16  Klasa C
255.255.224.0    11111111.11111111.11100000.00000000  /19   32  Klasa C
255.255.192.0    11111111.11111111.11000000.00000000  /18   64  Klasa C
255.255.128.0    11111111.11111111.10000000.00000000  /17  128  Klasa C
255.255.0.0      11111111.11111111.00000000.00000000  /16  "Klasa B"

255.254.0.0      11111111.11111110.00000000.00000000  /15    2  Klasa B
255.252.0.0      11111111.11111100.00000000.00000000  /14    4  Klasa B
255.248.0.0      11111111.11111000.00000000.00000000  /13    8  Klasa B
255.240.0.0      11111111.11110000.00000000.00000000  /12   16  klasa B
255.224.0.0      11111111.11100000.00000000.00000000  /11   32  Klasa B
255.192.0.0      11111111.11000000.00000000.00000000  /10   64  Klasa B
255.128.0.0      11111111.10000000.00000000.00000000  /9   128  Klasa B
255.0.0.0        11111111.00000000.00000000.00000000  /8   "Klasa A"
254.0.0.0        11111110.00000000.00000000.00000000  /7
252.0.0.0        11111100.00000000.00000000.00000000  /6
248.0.0.0        11111000.00000000.00000000.00000000  /5
240.0.0.0        11110000.00000000.00000000.00000000  /4   "Klasa E" (Multicast i reserved)
224.0.0.0        11100000.00000000.00000000.00000000  /3
192.0.0.0        11000000.00000000.00000000.00000000  /2
128.0.0.0        10000000.00000000.00000000.00000000  /1
0.0.0.0          00000000.00000000.00000000.00000000  /0   IP space

OwnCloud - instalacja i konfiguracja własnej chmury - Debian 6, Debian 7, Ubuntu.

Linux, Sieć

Spis treści [ukryj]

Testowane:

Debian 6.0.X, Debian 7.X.X, Apache2, (2.2.22), PHP5, (5.4.4), Mysql 5.5.31

Aby uruchomić własny serwer Cloud - OwnCloud, musimy mięć zainstalowane odpowiednie pakiety:

Opcjonalne:

  • curl,
  • libcurl3,
  • libcurl3-dev,
  • php5-curl,
  • php-pdo.

Instalacja własnej chmury - OwnCloud.

1. Instalacja wymaganych pakietów:

sudo apt-get updatesudo apt-get dist-upgradeapt-get install php5-json php5-gd php5-sqlite curl libcurl3 libcurl3-dev php5-curl php5-common php-xml-parser

2. Instalacja własnej chmury OwnCloud.

2.1. Instalacja OwnCloud z rezpozytorium.

OwnCloud zostanie domyślnie zainstalowany w folderze /var/www.

Instalacja OwnCloud dla Debian 7.
sudo echo ‚deb http://download.Opensuse.Org/repositories/isv:ownCloud:community/Debian_7.0/ /’ >> /etc/apt/sources.List.D/owncloud.List
sudo apt-get updatesudo wget http://download.Opensuse.Org/repositories/isv:ownCloud:community/Debian_7.0/Release.Keysudo apt-key add - <>sudo apt-get install owncloud
Instalacja OwnCloud dla Debian 6.
sudo echo ‚deb http://download.Opensuse.Org/repositories/isv:ownCloud:community/Debian_6.0/ /’ >> /etc/apt/sources.List.D/owncloud.List
sudo apt-get updatesudo wget http://download.Opensuse.Org/repositories/isv:ownCloud:community/Debian_6.0/Release.Keysudo apt-key add - <>sudo sudo apt-get install owncloud
Instalacja OwnCloud dla Ubuntu 13.4.
sudo echo ‚deb http://download.Opensuse.Org/repositories/isv:ownCloud:community/xUbuntu_13.04/ /’ >> /etc/apt/sources.List.D/owncloud.List
sudo apt-get updatesudo wget http://download.Opensuse.Org/repositories/isv:ownCloud:community/xUbuntu_13.04/Release.Keysudo apt-key add - <>sudo apt-get install owncloud
Instalacja OwnCloud dla Ubuntu 12.10.
sudo echo ‚deb http://download.Opensuse.Org/repositories/isv:ownCloud:community/xUbuntu_12.10/ /’ >> /etc/apt/sources.List.D/owncloud.List
sudo apt-get updatesudo wget http://download.Opensuse.Org/repositories/isv:ownCloud:community/xUbuntu_12.10/Release.Keysudo apt-key add - <>sudo apt-get install owncloud
Instalacja OwnCloud dla Ubuntu 12.4.
sudo echo ‚deb http://download.Opensuse.Org/repositories/isv:ownCloud:community/xUbuntu_12.04/ /’ >> /etc/apt/sources.List.D
sudo apt-get updatewget http://download.Opensuse.Org/repositories/isv:ownCloud:community/xUbuntu_12.04/Release.Keysudo apt-key add - <>sudo apt-get install owncloud
Dostęp do OwnCloud po instalacji z rezpozytorium:

Patrz punkt 5 , Konfiguracja OwnCloud.

2.2. Instalacja OwnCloud za pomoca Web Installer.

Pobranie skryptu instalacyjnego (setup-owncloud.Php) i instalacja w folderze np: /var/www..

Zmieniamy uprawnienia do pliku setup-owncloud.Php - odczyt/zapis.

sudo wget https://download.Owncloud.Com/download/community/setup-owncloud.Php -O /var/www/setup-owncloud.Phpsudo chown www-data:www-data /var/www/setup-owncloud.Php

Przechodzimy pod adres uruchamiając skrypt instalacyjny:

Powinien pojawić się instalator, który automatycznie sprawdzi zależności i pobierze najnowszą wersję Owncloud.
Klikamy na Next.

owncloud-web-installer_01

Jeśli instalator nie znalazł żadnych nieprawidłowości wypełniamy pole Install in subdirectory (podfolder).

np: owncloud.
Klikamy Next.

owncloud-web-installer_02

Instalator powinien zacząć pobierać owncloud w tle (na serwerze).
Po zakończeniu pobierania i poprawnej instalacji owncloud powinna pojawic sie wiadomosć Success.
Klikamy na Next.
Powinniśmy zostać przekierowani do konfiguratora OwnCloud.

owncloud-web-installer_03

Dostęp do OwnCloud po instalacji za pomocą skryptu:

Patrz punkt 5 , Konfiguracja OwnCloud.

2.3. Instalacja OwnCloud ze źródeł .

Pobranie najnowszej wersji OwnCloud, instalacja w floderze np: /var/www i zmiana uprawnień.

cd /var/wwwsudo wget download.Owncloud.Org/community/owncloud-5.0.11.Tar.Bz2 -O owncloud.Tar.Bz2sudo tar xvf owncloud.Tar.Bz2sudo chown www-data:www-data /var/www/owncloud -Rsudo rm -fr cowncloud.Tar.Bz2
Dostęp do OwnCloud po instalacji ze źródeł:

Patrz punkt 5 , Konfiguracja OwnCloud.

3. Edycja limitów w php.

Edycja limitów w PHP pozwoli na ładowanie plików o maksymalnej przypisanej w php.Ini wartości.
Pryzkład:

sudo nano /etc/php5/cli/php.Ini
...
Memory_limit = 512M
...
Post_max_size = 512M
...
Upload_max_filesize = 512M
...

Limity można także ustawiać w ownCloud w pliku .Htaccess.

sudo nano /var/www/owncloud/.Htaccess
...
Php_value upload_max_filesize 512M
Php_value post_max_size 512M
Php_value memory_limit 512M
...

4. Włączanie .Htaccess i mod_rewrite.

Aby zwiększyć bezpieczeństwo Chmury i mieć możliwość używania webfinger, w domyślnym pliku konfiguracyjnym „virtual host”(/etc/apache2/sites-enabled/000-default) ustawiamy AllowOverride All dla katalogu /var/www/. W ten sposób będzie możliwe nadpisywanie pliku .Htaccess przez aplikacje www lub serwer.

Przykład:

sudo nano /etc/apache2/sites-enabled/000-default
...       
         
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                AllowOverride All               
                Order allow,deny
                Allow from all
         
...

Włączanie modułów apache2 i restart:

sudo a2enmod rewritesudo a2enmod headerssudo /etc/init.D/apache2 restart

5. Konfiguracja OwnCloud.

1.1. Zalecana jest konfiguracja ownCloud z bazą danych SQLite, ponieważ jest w pełni zautomatyzowana.

Wystarczy stworzyć konto administratora wypełniając pole Nazwa użytkownika i Hasło, i zakończyć konfigurację klikajac naZakończ konfigurowanie.

owncloud-5-reg-simple

1.2. Dla większych instalacji, powinna być użyta baza danych MySQL lub PostgreSQL.

Aby można było pracować z bazą danych MySQL, należy stworzyć konto administratora wypełniając pole Nazwę użytkownika i Hasło. Nastepnie należy rozwinąć menu Zaawansowane i wypełnić następujące pola:

  • Katalog danych - domyślnie folder data będzie znajdował się w katalogu /owncloud.

Jesli folder data mieści się w innej lokalizacji niż domyślna instalacja ownCloud, należy podać ścieżkę do folderu data w menuKatalog danych.

  • Skonfiguruj bazę danych - wybieramy bazę danych - MySQL.
  • Użytkownik bazy danych - wpisujemy np - root.
  • Hasło do bazy danych - wpisujemy - hasło root’a.
  • Nazwa bazy danych - nazwa bazy danych ownCloud np: owncloud.
  • localhost - wpisujemy adres IP lub nazwę hosta; - pozostawiamy domyślnie - localhost.

Aby zakończyć konfigurację klikamy na Zakończ konfigurowanie.

owncloud-5-reg`

2. Konfiguracja Zaawansowana.

Edycja pliku /var/www/owncloud/config/config.Php.

sudo nano /var/www/owncloud/config/config.Php
 true,
"dbtype" => 'mysql',
"dbname" => 'owncloud',
"dbuser" => 'oc_nazwa_użytkownika',
"dbpassword" => '8442c......F3d3....461b6.....E786',
"dbhost" => 'localhost',
"dbtableprefix" => "",
"forcessl" => false,
"enablebackup" => false,
"theme" => "",
"3rdpartyroot" => "",
"3rdpartyurl" => "",
"defaultapp" => "files",
"knowledgebaseenabled" => true,
"knowledgebaseurl" => "",
"appstoreenabled" => true,
"appstoreurl" => "",
"mail_smtpmode" => "sendmail",
"mail_smtphost" => "127.0.0.1",
"mail_smtpauth" => false,
"mail_smtpname" => "",
"mail_smtppassword" => "",
"appcodechecker" => "",
"log_type" => "",
"logfile" => "",
"loglevel" => "",
"datadirectory" => '/var/www/owncloud/data',
);
?>

owncloud

Źródło:

http://owncloud.Org/

Analiza wydajności w Linuksie programem kSar

kSar jest aplikacją Java, która graficznie prezentuje dane wygenerowane przez sar.

Uruchomienie kSar

Najłatwiejszym sposobem eksploatacji aplikacji kSar jest jej uruchomienie poprzez Java Webstart.

Niestety oryginalna strona kSar z linkiem do Webstart została usunięta, dlatego należy pobrać skompresowany plik zip kSar, rozpakować go i następnie uruchomić aplikacje. http://sourceforge.Net/projects/ksar/files/

java -jar kSar.Jar

Następnie otwarte zostaje okno, w którym mogą zostać wybrane / wczytane pliki sar. Obok zrzut wykresu danych, które zostały wczytane w celu testu: Screenshot-KSar.Png

Przy domyślnych ustawieniach sar zapisuje najczęściej dane z ostatnich 7 dni. Okres ten może zostać zwiększony maks. Do 1 miesiąca. Każdego dnia generowany jest jeden plik (np. /var/log/sysstat/sar01). Mogą one zostać powiązane za pośrednictwem "cat". Aby połączyć dane z wielu dni można skorzystać z następującego polecenia:

cat /var/log/sysstat/sar?? /tmp/sar.All

Plik wyjściowy może również zostać otwarty w kSar.

Analiza sieci w Linuksie z netstat

netstat pokazuje w Linuksie połączenia sieciowe, tablice tras, statystyki interfejsów, połączenia masquerade i członkostwa multicast. Artykuł ten pokazuje przykłady zastosowania netstat. Obok netstat również iptstate dostępne połączenia sieciowe (ze wskazaniem czasu rzeczywistego).

Spis treści

[ukryj]

Przykłady

Połączenia sieciowe

netstat -tapen nadaje się do wyświetlania obecnie dostępnych połączeń sieciowych. Poszczególne parametry mają następujące znaczenie:

  • -t (wyświetla jedynie połączenia TCP, -u tylko połączenia UDP)
  • -a (wyświetla wszystkie połączenia)
  • -p (pokazuje również PID i nazwę programu do którego należy połączenie)
  • -e (wyświetla statystykę sieci Ethernet)
  • -n (adresy i numery portów są wyrażane numerycznie i nie zostaną zmienione na nazwy)
[root@tpw ~]# netstat -tapen
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       User       Inode      PID/Program name  
Tcp        0      0 0.0.0.0:5060                0.0.0.0:*                   LISTEN      500        66008      3260/twinkle        
Tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      0          5355       1289/rpcbind        
Tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      0          6668       1589/sshd          
Tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      0          5505       1322/cupsd          
Tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      0          12548      2297/sendmail: acce
Tcp        0      0 0.0.0.0:33466               0.0.0.0:*                   LISTEN      0          6486       1532/rpc.Statd      
Tcp        0      0 192.168.1.52:59861          192.168.1.254:22            ESTABLISHED 500        100032     3703/ssh            
Tcp        0      0 192.168.1.52:36330          217.188.215.74:443          ESTABLISHED 500        104396     2608/firefox        
Tcp        0      0 192.168.1.52:33252          74.125.79.97:443            ESTABLISHED 500        101832     2608/firefox        
Tcp        0      0 :::111                      :::*                        LISTEN      0          5360       1289/rpcbind        
Tcp        0      0 :::22                       :::*                        LISTEN      0          6670       1589/sshd          
Tcp        0      0 ::1:631                     :::*                        LISTEN      0          5504       1322/cupsd          
[root@tpw ~]#

Tablica tras

netstat -r

[root@tpw ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     *               255.255.255.0   U         0 0          0 eth0
Default         192.168.1.254   0.0.0.0         UG        0 0          0 eth0
[root@tpw ~]#

Statystyki interfejsu

netstat -i

[root@tpw ~]# netstat -i
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
Eth0       1500   0    26524      0      0      0    22118      0      0      0 BMRU
Lo        16436   0       34      0      0      0       34      0      0      0 LRU
[root@tpw ~]#

netstat -s

[root@tpw ~]# netstat -s
Ip:
    28144 total packets received
    1 with invalid addresses
    0 forwarded
    0 incoming packets discarded
    28069 incoming packets delivered
    23144 requests sent out
    10 dropped because of missing route
Icmp:
    12 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        Destination unreachable: 12
    13 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        Destination unreachable: 13
IcmpMsg:
        InType3: 12
        OutType3: 13
Tcp:
    146 active connections openings
    0 passive connection openings
    4 failed connection attempts
    29 connection resets received
    2 connections established
    16637 segments received
    12078 segments send out
    67 segments retransmited
    0 bad segments received.
    59 resets sent
Udp:
    11421 packets received
    0 packets to unknown port received.
    0 packet receive errors
    10998 packets sent
UdpLite:
TcpExt:
    7 TCP sockets finished time wait in fast timer
    543 delayed acks sent
    Quick ack mode was activated 12 times
    6 packets directly queued to recvmsg prequeue.
    8 packets directly received from prequeue
    13040 packets header predicted
    799 acknowledgments not containing data received
    1470 predicted acknowledgments
    5 times recovered from packet loss due to SACK data
    4 congestion windows recovered after partial ack
    2 TCP data loss events
    3 timeouts after SACK recovery
    7 fast retransmits
    33 other TCP timeouts
    12 DSACKs sent for old packets
    2 DSACKs received
    10 connections reset due to unexpected data
    23 connections reset due to early user close
    3 connections aborted due to timeout
    TCPDSACKIgnoredNoUndo: 1
    TCPSackShifted: 71
    TCPSackMerged: 35
    TCPSackShiftFallback: 10
IpExt:
    InMcastPkts: 19
    OutMcastPkts: 14
    InBcastPkts: 54
    OutBcastPkts: 51
    InOctets: 20989496
    OutOctets: 5396900
    InMcastOctets: 5540
    OutMcastOctets: 3421
    InBcastOctets: 6629
    OutBcastOctets: 5898
[root@tpw ~]#

Dalsze informacje

  • iptstate wyświetla dostępne połączenia sieciowe (ze wskazaniem czasu rzeczywistego).

Analiza ruchu sieciowego w Linuksie z mtr

Narzędzie diagnostyczne mtr (My Traceroute) łączy w jednym programie funkcjonalność aplikacji traceroute i ping. Może zostać uruchomiony w wierszu poleceń jako program ncurses lub jako graficzny program GTK+. mtr opracowała holenderska firma BitWizard B.V.

Spis treści

[ukryj]

Sposób funkcjonowania

Program uruchomiany jest w CLI z hostem jako parametrem. Jako host rozumiana jest nazwa danego hosta lub jego adres IP, do którego ma zostać skontrolowane połączenie:

mtr www.Google.Com

Po zamianie symbolicznej nazwy w przynależny adres IP (usługa DNS) mtr wysyła kilka ICMP echo requests (ping-ów) do tego adresu IP. Jest przy tym określane w pakiecie IP TTL (Time to live). Pierwszy ma TTL o wartości 1, następny request ma TTL o wartości 2 itd. Przez ograniczenie TTL pakiet IP jest porzucany już przy pierwszym, drugim itd. Hop-ie (routerze). Każdy router odpowiada na to wiadomością ICMP Time-to-live exceeded. Mtr otrzymuje od każdego routera taką wiadomość i wie dzięki temu, jaki router znajduje się na drodze do hosta.

TTL jest tak długo zwiększane, aż host zostanie osiągnięty. Wtedy mtr zaczyna od początku. Dzięki temu po pewnym czasie mtr może określić w ten sposób średnie wartości Best-Case/Worst-Case.

Instalacja

mtr znajduje się domyślnie w większości dystrybucji Linuksa. Może zostać zainstalowany poprzez odpowiedni manager pakietów pod następującą nazwą pakietu:

  • Red Hat/CentOS/Fedora/SuSE: mtr (CLI), mtr-gtk (wersja graficzna)
  • Debian/Ubuntu: mtr-tiny (CLI), mtr (wersja graficzna)

Przykłady

Następujące przykłady pokazują zapytania mtr. Pierwsze 3 hop-sy są przy tym zawsze anonimowe.

Interaktywny wynik

Następujący wynik pokazuje zapytanie:

mtr www.Google.Com
                                  My traceroute  [v0.75]
Tpw (0.0.0.0)                                                    Tue Sep  8 13:26:54 2009
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                                 Packets               Pings
 Host                                          Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. XXXXXXXXXXXXXX                              0.0%   201    0.8   1.0   0.8   5.3   0.8
 2. XXXXXXXXXXXXXX                              0.0%   201    3.4   8.0   2.5 248.7  21.4
 3. XXXXXXXXXXXXXX                              0.0%   201    6.0  10.8   4.9  98.8  13.2
 4. 195.3.118.50                                0.0%   200   18.5  22.5  17.2 113.5  13.1
 5. 72.14.198.241                               0.0%   200   21.7  22.2  17.1  90.2  11.7
 6. 209.85.255.176                              0.0%   200   17.5  23.0  17.3 131.0  15.2
 7. 209.85.248.182                              0.0%   200   30.3  27.9  24.0  82.5   7.5
 8. 64.233.175.246                              0.0%   200   29.1  30.0  26.8  73.7   6.1
 9. 72.14.239.197                               0.0%   200   39.4  29.9  27.4  57.1   3.0
    72.14.239.199
10. 209.85.255.110                              0.0%   200   29.8  34.7  27.5  52.7   5.1
    209.85.255.98
    209.85.255.102
    209.85.255.106
11. Ew-in-f147.Google.Com                       0.0%   200   30.2  30.0  27.4  42.3   2.2

Report

mtr może być również wykonany w trybie report (-r). Ilość zapytań jest określana z parametrem -c. Za pośrednictwem -w można zapewnić, że zostanie podana kompletna nazwa hosta i nie zostanie skrócona:

[root@tpw ~]# mtr -r -w -c 10 www.Google.Com
HOST: tpw                               Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. XXXXXXXXXXXXXX                     0.0%    10    0.8   0.8   0.8   1.0   0.1
  2. XXXXXXXXXXXXXX                     0.0%    10    3.1   3.5   2.6   4.4   0.7
  3. XXXXXXXXXXXXXX                     0.0%    10    6.2   6.9   5.5  12.7   2.1
  4. 195.3.118.50                       0.0%    10   23.2  24.7  17.5  64.0  14.5
  5. 72.14.198.241                      0.0%    10   20.1  19.6  17.5  28.3   3.2
  6. 209.85.255.176                     0.0%    10   19.2  18.4  17.5  20.9   1.0
  7. 209.85.248.182                     0.0%    10   26.4  30.0  24.5  58.6  10.2
  8. 64.233.175.246                     0.0%    10   27.2  28.7  27.2  32.1   1.7
  9. 72.14.239.199                      0.0%    10   28.1  29.4  28.1  31.3   1.0
 10. 209.85.255.98                      0.0%    10   33.1  33.8  29.0  40.6   4.6
 11. Ew-in-f147.Google.Com              0.0%    10   28.1  29.0  27.5  30.7   1.0
[root@tpw ~]#

Graficzna wersja

Graficzna wersja uruchamiana jest poleceniem xmtr:

xmtr www.Google.Com

Polecenie xmtr uruchamia z wiersza poleceń graficzną wersję mtr (My traceroute)


Analiza

W przypadku bardziej oddalonych stron można przez round trip time rozpoznać, pomiędzy którymi hop-sami (routerami) znajdują się podmorskie kable telekomunikacyjne (np. Przez Atlantyk). Podczas analizy połączenia do www.Areca.Com.Tw jest to np. Bardzo dobrze widoczne:

[root@tpw ~]# mtr -r -w -c 10 www.Areca.Com.Tw
HOST: tpw                               Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. XXXXXXXXXXXXXX                     0.0%    10    0.8   0.8   0.8   1.0   0.1
  2. XXXXXXXXXXXXXX                     0.0%    10    3.7   4.6   2.6   6.7   1.4
  3. XXXXXXXXXXXXXX                     0.0%    10    9.3  14.0   6.4  54.5  15.9
  4. Iix10-aux11.Highway.Telekom.At     0.0%    10    8.8   7.1   5.0   8.8   1.1
  5. 193.159.227.13                     0.0%    10    7.0   7.0   5.1  10.1   1.6
  6. 217.239.40.34                      0.0%    10  110.7 108.6 107.2 110.7   1.4
  7. 192.205.34.149                     0.0%    10  106.6 107.5 105.4 111.1   2.2
  8. Cr1.N54ny.Ip.Att.Net               0.0%    10  175.1 175.4 173.9 177.2   0.9
  9. Cr2.Cgcil.Ip.Att.Net               0.0%    10  175.4 175.7 174.3 176.6   0.8
 10. Cr1.Cgcil.Ip.Att.Net               0.0%    10  175.6 175.7 174.4 178.0   1.2
 11. Cr2.Dvmco.Ip.Att.Net               0.0%    10  175.7 175.3 174.7 176.2   0.6
 12. Cr1.Slkut.Ip.Att.Net               0.0%    10  179.6 176.6 174.9 179.6   1.4
 13. Cr2.La2ca.Ip.Att.Net               0.0%    10  192.3 192.4 190.7 194.4   1.2
 14. Gar2.Lsnca.Ip.Att.Net              0.0%    10  175.9 176.7 173.7 182.6   2.5
 15. 12.118.42.38                       0.0%    10  214.4 183.1 175.5 214.4  14.6
 16. 202.39.93.53                       0.0%    10  196.9 192.8 189.1 198.1   2.9
 17. La-c12r11.Usa-la.Router.Hinet.Net  0.0%    10  175.2 226.2 174.4 408.5  80.4
 18. R32-fo.Ty.Hinet.Net               10.0%    10  317.6 319.3 316.2 323.4   2.2
 19. Ty-fo-crs12.Router.Hinet.Net      10.0%    10  310.1 309.1 308.5 310.1   0.6
 20. Ch-c2-c12r12.Router.Hinet.Net     10.0%    10  310.2 312.6 310.2 320.4   3.2
 21. Tc-c12r12.Router.Hinet.Net        10.0%    10  314.3 313.7 311.0 331.2   6.6
 22. Tcwh-c76r2.Router.Hinet.Net       10.0%    10  313.3 312.8 311.3 316.8   1.8
 23. Tc-fy-c12r2.Router.Hinet.Net      10.0%    10  311.0 313.5 311.0 321.0   3.0
 24. 203-69-42-38.Hihosting.Hinet.Net  10.0%    10  311.1 311.6 309.7 314.5   1.8
[root@tpw ~]# 

Przy zapytaniach między następującymi routerami łącze przebiega najwidoczniej przez dłuższy podmorski kabel telekomunikacyjny:

  • między hop 5 i 6
  • między hop 17 i 18

Dalsze informacje

Odczyt informacji o sprzęcie z dmidecode

dmidecode jest narzędziem w Linuksie, które umożliwia wyświetlanie tabel DMI w czytelnej formie. DMI (Desktop Management Interface) jest częścią specyfikacjiSystem Management BIOS (SMBIOS). Z punku widzenia użytkownika DMI jest udostępnioną przez BIOS tabelą, która zawiera informacje o dostępnym sprzęcie.

Spis treści

[ukryj]

Kompletny przykład dmidecode

dmidecode jest narzędziem w Linuksie, które umożliwia wyświetlanie tabel DMI w czytelnej formie. DMI (Desktop Management Interface) jest częścią specyfikacjiSystem Management BIOS (SMBIOS). Z punku widzenia użytkownika DMI jest udostępnioną przez BIOS tabelą, która zawiera informacje o dostępnym sprzęcie.

Kompletny przykład dmidecode

Supermicro X9SCM-F

Przykład pokazuje wynik z dmidecode w systemie z płytą glowna Supermicro X9SCM-F:

# dmidecode 2.9
SMBIOS 2.7 present.
105 structures occupying 3853 bytes.
Table at 0x000EADC0.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
        Vendor: American Megatrends Inc.
        Version: 4.6.4
        Release Date: 06/30/2011
        Address: 0xF0000
        Runtime Size: 64 kB
        ROM Size: 8192 kB
        Characteristics:
                PCI is supported
                BIOS is upgradeable
                BIOS shadowing is allowed
                Boot from CD is supported
                Selectable boot is supported
                BIOS ROM is socketed
                EDD is supported
                5.25"/1.2 MB floppy services are supported (int 13h)
                3.5"/720 KB floppy services are supported (int 13h)
                3.5"/2.88 MB floppy services are supported (int 13h)
                Print screen service is supported (int 5h)
                8042 keyboard services are supported (int 9h)
                Serial services are supported (int 14h)
                Printer services are supported (int 17h)
                ACPI is supported
                USB legacy is supported
                BIOS boot specification is supported
                Function key-initiated network boot is supported
                Targeted content distribution is supported
    

Intel SR2500

Ten przykład pokazuje wynik z dmidecode w serwerze Intel SR2500:

[root@testserver ~]# dmidecode 
# dmidecode 2.9
SMBIOS 2.5 present.
79 structures occupying 3014 bytes.
Table at 0x9FA42000.


[root@testserver ~]# 

Parametry dmidecode

dmidecode -t TYPE pozwala na ograniczenie zakresu informacji, które mają być pokazane. Standardowo dmidecode pokazuje wszystkie typy.

Mogą zostać podane następujące typy (źródło: dmidecode manpage):

       Type   Information
       ────────────────────────────────────────
          0   BIOS
          1   System
          2   Base Board
          3   Chassis
          4   Processor
          5   Memory Controller
          6   Memory Module
          7   Cache
          8   Port Connector
          9   System Slots
         10   On Board Devices
         11   OEM Strings
         12   System Configuration Options
         13   BIOS Language
         14   Group Associations
         15   System Event Log
         16   Physical Memory Array
         17   Memory Device
         18   32-bit Memory Error
         19   Memory Array Mapped Address
         20   Memory Device Mapped Address
         21   Built-in Pointing Device
         22   Portable Battery
         23   System Reset
         24   Hardware Security
         25   System Power Controls
         26   Voltage Probe
         27   Cooling Device
         28   Temperature Probe
         29   Electrical Current Probe
         30   Out-of-band Remote Access
         31   Boot Integrity Services
         32   System Boot
         33   64-bit Memory Error
         34   Management Device
         35   Management Device Component
         36   Management Device Threshold Data
         37   Memory Channel
         38   IPMI Device
         39   Power Supply
        126   used for disabled entries
        127   (end-of-table marker)
  128 - 255   OEM-specific data

Aktualnie może również zostać podane hasło odpowiednie dla danego typu. Dostępne są następujące hasła:

       Keyword     Types
       ──────────────────────────────
       Bios        0, 13
       System      1, 12, 15, 23, 32
       Baseboard   2, 10
       Chassis     3
       Processor   4
       Memory      5, 6, 16, 17
       Cache       7
       Connector   8
       Slot        9

/proc/cpuinfo

Wynik z /proc/cpuinfo tego samego systemu:

[root@testserver ~]# cat /proc/cpuinfo
Processor        : 0
Vendor_id        : GenuineIntel
Cpu family        : 6
Model                : 15
Model name        : Intel(R) Xeon(R) CPU           E5345  @ 2.33GHz
Stepping        : 7
Cpu MHz                : 2327.504
Cache size        : 4096 KB
Physical id        : 0
Siblings        : 4
Core id                : 0
Cpu cores        : 4
Fpu                : yes
Fpu_exception        : yes
Cpuid level        : 10
Wp                : yes
Flags                : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr lahf_lm
Bogomips        : 4658.26
Clflush size        : 64
Cache_alignment        : 64
Address sizes        : 36 bits physical, 48 bits virtual
Power management:

Processor        : 1
[...]
[root@testserver ~]#

Dalsze informacje

Określenie zużycia miejsca z konsoli przez df i du na zamontowanych partycjach w Linuksie

Następujące polecenia umożliwiają wyświetlenie informacji o zużyciu miejsca na zamontowanych partycjach w Linuksie.

df

disk free pokazuje wolne, a więc dostępne, miejsce na dysku.

Wolne miejsce całego systemu plików

 df -h

Wolne miejsce w lokalnym systemie plików

 df -hl 

du

disk usage pokazuje zajęte, niedostępne miejsce na dysku

Całkowita zajęta powierzchnia w systemie

 du -sh /

Zajęta powierzchnia w katalogu Media, bez uwzględnienia plików *.Bmp

 du --exclude="*.Bmp*" -sh media/ 

Zajęta powierzchnia w aktualnym katalogu

 du -sh ./

Pomiar wydajności systemu plików w Linuksie z dbench

Narzędzia dbench i tbench symulują obciążenie benchmarku NetBench, który wykorzystywany jest do pomiaru prędkości serwerów plików (Windows). W przeciwieństwie do NetBench dbench i tbench nie potrzebują środowiska testowego z kilkoma komputerami Windows. Dbench symuluje obciążenie systemu plików a tbench obciążenie sieciowe.

Uwaga: Ten benchmark nie jest realnym przykładem obciążenia serwera plików. Prawie 90% testu to zapis, gdzie w normalnym środowisku dominuje odczyt. Nie oznacza to jednak, że benchmark jest bezużyteczny. Musi to jednak zostać uwzględnione przy interpretacji wyników. (Cytat: That doesn't mean the benchmark is useless, it just means you shouldn't use this for purchasing decisions unless you really understand the results and how they relate to your environment.[1]).

Dla prostych testów porównawczych systemów I/O (które są łatwe do zinterpretowania) zalecane są testy z dd jak opisane w Test wydajności I/O programem dd w Linuksie. Dalsze narzędzia są opisane w artykule Przegląd narzędzi do benchmarku wydajności I/O.

Spis treści

[ukryj]

Informacje podstawowe

dbench generuje jedynie obciążenie systemu plików. Tworzy takie same zapytania (calls) I/O jak generowane przez serwer smbd w sambie w trakcie przebiegu NetBench. Dbench nie generuje zapytań sieciowych.

dbench uruchamiany jest z numerycznym parametrem, który definiuje ilość symulowanych klientów.

Zarówno dbench jak i tbench odczytują opis obciążenia z pliku client.Txt. Jest to plik o wielkości około 25 MB i opisuje 500.000 operacji, które są generowane w kliencie NetBench w typowym przebiegu benchmarku. Dbench i tbench wykorzystuje ten opis obciążenia w celu wygenerowania takiego samego obciążenia jak NetBench (jednakże bez konieczności posiadania dużego środowiska testowego z wieloma komputerami).[2]

Jakie komponenty mają wpływ na wynik dbench

Tego pytania nie możemy kompletnie wyjaśnić, gdyż w dokumentacji dbench nie znaleźliśmy dokładnych informacji. Ponieważ testy przeprowadzone są w systemie plików (a więc np. W katalogu /test w systemie plików ext3), obok kontrolera RAID, CPU, pamięci RAM, istotne znaczenie ma również system plików i dokładna jego konfiguracja (np. Wielkość bloku, tryb journaling-u, itd., vide Das Linux-Dateisystem Ext3 tunen[3]).

Wersje dbench

W momencie pisania tego artykułu aktualną wersją dbench jest wersja 4[4].

Ważne: Wyniki testów dbench różnych systemów (jak i w innych benchmarkach) powinny być porównywane jedynie przy wykorzystaniu tej samej wersji oprogramowania. Obowiązuje to przede wszystkim samego benchmarku jak i pozostałego środowiska systemu operacyjnego.

Na Thinkpad T43 wyniki z wersji dbench 3.04 i dbench 4.00 znacząco się różnią. Tutaj przykład wyniku z dbench 4.00:

[root@tpw ~]# dbench -D /root -t 60 2
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2       664    40.93 MB/sec  warmup   1 sec  latency 807.744 ms
[...]
   2     18605    21.24 MB/sec  warmup  11 sec  latency 125.545 ms
   2     23179    26.98 MB/sec  execute   1 sec  latency 187.022 ms
[...]
   2    134813    20.87 MB/sec  execute  59 sec  latency 224.737 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX      40301     0.036    27.270
 Close          29532     0.006    15.077
 Rename          1706     0.074    10.095
 Unlink          8188     0.514   356.111
 Qpathinfo      36506     0.022    31.590
 Qfileinfo       6349     0.007    20.038
 Qfsinfo         6729     0.176    23.259
 Sfileinfo       3258     0.064    73.854
 Find           14134     0.083    31.233
 WriteX         19868     0.076    24.657
 ReadX          63311     0.020    44.260
 LockX            132     0.008     0.121
 UnlockX          132     0.006     0.076
 Flush           2815    37.272  1173.458

Throughput 20.8706 MB/sec  2 clients  2 procs  max_latency=1173.470 ms
[root@tpw ~]#

Wynik z dbench 3.04:

[root@tpw ~]# dbench -D /root -t 60 2
Dbench version 3.04 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 clients started
   2     15322   199.37 MB/sec  warmup   1 sec  
[...]
   2    217241   215.99 MB/sec  warmup  11 sec  
   2    253935   215.24 MB/sec  execute   1 sec  
[...]
   2   1589300   249.36 MB/sec  execute  59 sec  
   2   1611833   249.27 MB/sec  cleanup  60 sec  
   2   1611833   249.09 MB/sec  cleanup  60 sec  

Throughput 249.268 MB/sec 2 procs
[root@tpw ~]#

Przykłady

Tutaj jest udokumentowanych kilka przykładów testów z dbench. Wykorzystywane przy tym jest następujące oprogramowanie:

  • grml 2008.11 64 Bit
  • dbench 4.00 został doinstalowany z repozytorium Debiana

W przykładach z serwerem wykorzystywany jest następujący sprzęt:

  • serwer Intel SR2500 z płytą S5000PALR
  • 2x Intel Xeon 5110 1.60GHz CPUs
  • 8 GB RAM
  • WDC WD1600YS-01SHB1 HDD na SATA on-board (/dev/sda)
  • 2x WDC WD1600YS-01SHB1 HDD na kontrolerze Areca ARC-1210 z BBU, jako RAID1 (/dev/sdb)

Partycje w przykładach z serwerem:

root@grml ~ # fdisk -l /dev/sda

Disk /dev/sda: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x44282a47

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        2433    19543041   83  Linux
/dev/sda2            2434        4866    19543072+  83  Linux
Root@grml ~ # fdisk -l /dev/sdb

Disk /dev/sdb: 159.9 GB, 159999852544 bytes
255 heads, 63 sectors/track, 19452 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0b530993

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2433    19543041   83  Linux
/dev/sdb2            2434        4866    19543072+  83  Linux
Root@grml ~ #

Na pierwszym urządzeniu (device) jest system plików ext3.

W przykładach z laptopem wykorzystywany jest następujący sprzęt:

  • IBM Thinkpad T43 Type 2668-4GG, 1,5 GByte RAM
  • Fujitsu MHT2060AH HDD, Firmware Version: 8471

Partycje w laptopie:

[root@tpw ~]# fdisk -l /dev/sda

Disk /dev/sda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xcccdcccd

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1305    10482381   83  Linux
/dev/sda2            1306        1436     1052257+  82  Linux swap / Solaris
/dev/sda3            1437        7296    47070450   83  Linux
[root@tpw ~]#

Serwer z jednym dyskiem (cache dysku włączony)

root@grml ~ # hdparm -W /dev/sda

/dev/sda:
 Write-caching =  1 (on)
Root@grml ~ #

dbench -D /mnt/sda1 -t 60 2

root@grml ~ # dbench -D /mnt/sda1 -t 60 2                            
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2       664    42.31 MB/sec  warmup   1 sec  latency 917.256 ms
[...]
   2     57720    59.59 MB/sec  warmup  11 sec  latency 68.864 ms
   2     72707    71.75 MB/sec  execute   1 sec  latency 74.720 ms
[...]
   2    410917    63.04 MB/sec  execute  59 sec  latency 76.714 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX     120971     0.040   190.849
 Close          88827     0.003     0.352
 Rename          5120     0.083     1.041
 Unlink         24432     0.124    59.353
 Qpathinfo     109685     0.022     9.962
 Qfileinfo      19126     0.002     0.124
 Qfsinfo        20088     0.115     0.920
 Sfileinfo       9847     0.028    26.919
 Find           42365     0.061    10.061
 WriteX         59735     0.067    27.412
 ReadX         189650     0.009    10.311
 LockX            394     0.005     0.011
 UnlockX          394     0.003     0.009
 Flush           8476    11.076   318.092

Throughput 63.0443 MB/sec  2 clients  2 procs  max_latency=318.102 ms
Dbench -D /mnt/sda1 -t 60 2  7.58s user 19.94s system 38% cpu 1:12.04 total
Root@grml ~ #

dbench -D /mnt/sda1 -s -S -t 60 2

Test jest przeprowadzany z synchronicznym I/O (-s i -S):

root@grml ~ # dbench -D /mnt/sda1 -s -S -t 60 2
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
0 of 2 processes prepared for launch   0 sec
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2       211    16.40 MB/sec  warmup   1 sec  latency 22.393 ms
[...]
   2     11079    14.21 MB/sec  warmup  11 sec  latency 34.859 ms
   2     13659    16.99 MB/sec  execute   1 sec  latency 32.508 ms
[...]
   2     86713    13.61 MB/sec  execute  59 sec  latency 16.814 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX      26270     0.055    18.976
 Close          19341     0.003     0.109
 Rename          1110     6.404    24.235
 Unlink          5260     6.202    34.697
 Qpathinfo      23857     0.022     5.513
 Qfileinfo       4179     0.002     0.129
 Qfsinfo         4336     0.116     0.441
 Sfileinfo       2133     0.072    11.523
 Find            9222     0.061     6.609
 WriteX         12991     5.786    32.503
 ReadX          41264     0.011     8.457
 LockX             86     0.005     0.009
 UnlockX           86     0.003     0.005
 Flush           1831     0.230    20.860

Throughput 13.6131 MB/sec (sync open) (sync dirs)  2 clients  2 procs  max_latency=34.703 ms
Root@grml ~ #

Test porównawczy z dd

Szybkość transferu:

root@grml ~ # dd if=/dev/zero of=/dev/sda2 bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 18.9857 s, 56.6 MB/s
Root@grml ~ #

Opóźnienie:

root@grml ~ # dd if=/dev/zero of=/dev/sda2 bs=512 count=1000 oflag=direct
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 0.190829 s, 2.7 MB/s
Root@grml ~ #

Serwer z jednym dyskiem (cache dysku wyłączony)

root@grml ~ # hdparm -W0 /dev/sda                                        

/dev/sda:
 Setting drive write-caching to 0 (off)
 Write-caching =  0 (off)
Root@grml ~ # hdparm -W /dev/sda                                        

/dev/sda:
 Write-caching =  0 (off)
Root@grml ~ #

dbench -D /mnt/sda1 -t 60 2

root@grml ~ # dbench -D /mnt/sda1 -t 60 2
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
0 of 2 processes prepared for launch   0 sec
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2       664    42.32 MB/sec  warmup   1 sec  latency 888.941 ms
[...]
   2      9780     7.54 MB/sec  execute   1 sec  latency 298.443 ms
[...]
   2     58415     9.00 MB/sec  execute  59 sec  latency 224.701 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX      17281     0.048    16.933
 Close          12684     0.002     0.016
 Rename           734     0.237    16.999
 Unlink          3484     0.971   169.289
 Qpathinfo      15654     0.022    16.674
 Qfileinfo       2739     0.002     0.013
 Qfsinfo         2871     0.103     0.235
 Sfileinfo       1414     0.537    20.447
 Find            6055     0.059    17.059
 WriteX          8538     0.089    17.111
 ReadX          27149     0.013    16.978
 LockX             56     0.005     0.008
 UnlockX           56     0.003     0.004
 Flush           1211    92.950   915.861

Throughput 9.00276 MB/sec  2 clients  2 procs  max_latency=915.867 ms
Root@grml ~ #

dbench -D /mnt/sda1 -s -S -t 60 2

Test jest przeprowadzany z synchronicznym I/O (-s i -S):

root@grml ~ # dbench -D /mnt/sda1 -s -S -t 60 2
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2        33     2.10 MB/sec  warmup   1 sec  latency 67.315 ms
[...]
   2       275     1.87 MB/sec  warmup  11 sec  latency 75.885 ms
   2       329     1.63 MB/sec  execute   1 sec  latency 76.689 ms
[...]
   2      8299     1.70 MB/sec  execute  59 sec  latency 83.819 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX       2744     1.680    25.351
 Close           2066     0.003     0.020
 Rename           124    50.439    83.795
 Unlink           528    42.470   633.391
 Qpathinfo       2447     0.019     0.076
 Qfileinfo        506     0.002     0.004
 Qfsinfo          471     0.111     0.210
 Sfileinfo        268     2.482    17.049
 Find             946     0.283    17.198
 WriteX          1765    47.682   708.270
 ReadX           4203     0.231    17.975
 LockX              8     0.006     0.014
 UnlockX            8     0.003     0.004
 Flush            220     2.600    56.430

Throughput 1.69986 MB/sec (sync open) (sync dirs)  2 clients  2 procs  max_latency=708.275 ms
Root@grml ~ #

Testy porównawcze z dd

Szybkość transferu:

root@grml ~ # dd if=/dev/zero of=/dev/sda2 bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 35.9155 s, 29.9 MB/s
Root@grml ~ #

Opóźnienie:

root@grml ~ # dd if=/dev/zero of=/dev/sda2 bs=512 count=1000 oflag=direct
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 8.37534 s, 61.1 kB/s
Root@grml ~ #

Serwer z RAID1 na kontrolerze Areca

Kontroler RAID ARC 1210 posiada cache 256 MB[5] (jest on włączony, gdyż wykorzystywane jest BBU). Ten cache naturalnie przyśpiesza przeprowadzane operacje.

dbench -D /mnt/sdb1 -t 60 2

root@grml ~ # dbench -D /mnt/sdb1 -t 60 2    
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2     10196   144.61 MB/sec  warmup   1 sec  latency 94.193 ms
[...]
   2    125495   126.06 MB/sec  warmup  11 sec  latency 48.064 ms
   2    148717   115.69 MB/sec  execute   1 sec  latency 47.580 ms
[...]
   2    769497   116.00 MB/sec  execute  59 sec  latency 42.089 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX     222647     0.040     6.986
 Close         163502     0.003     1.102
 Rename          9426     0.085     0.358
 Unlink         44987     0.064    10.301
 Deltree            4     6.098    11.989
 Mkdir              2     0.015     0.016
 Qpathinfo     201790     0.023    14.008
 Qfileinfo      35290     0.002     0.238
 Qfsinfo        36994     0.116    10.279
 Sfileinfo      18136     0.020     0.380
 Find           77974     0.064    10.987
 WriteX        110650     0.062    10.658
 ReadX         348778     0.009     1.130
 LockX            724     0.005     0.029
 UnlockX          724     0.003     0.005
 Flush          15604     4.769  2467.957

Throughput 115.998 MB/sec  2 clients  2 procs  max_latency=2467.966 ms
Dbench -D /mnt/sdb1 -t 60 2  15.37s user 37.09s system 72% cpu 1:12.03 total
Root@grml ~ #

dbench -D /mnt/sdb1 -s -S -t 60 2

Test jest przeprowadzany z synchronicznym I/O (-s i -S):

root@grml ~ # dbench -D /mnt/sdb1 -s -S -t 60 2
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2       235    17.96 MB/sec  warmup   1 sec  latency 16.334 ms
[...]
   2     14124    17.14 MB/sec  warmup  11 sec  latency 13.281 ms
   2     16884    15.83 MB/sec  execute   1 sec  latency 19.392 ms
[...]
   2     98187    15.15 MB/sec  execute  59 sec  latency 17.411 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX      29164     0.048    10.052
 Close          21442     0.003     0.045
 Rename          1236     5.807    19.724
 Unlink          5861     5.911  3370.717
 Qpathinfo      26469     0.023    10.036
 Qfileinfo       4628     0.002     0.046
 Qfsinfo         4823     0.116     0.463
 Sfileinfo       2369     0.043     6.799
 Find           10203     0.062     6.443
 WriteX         14408     5.058  2651.276
 ReadX          45836     0.011     6.662
 LockX             96     0.005     0.009
 UnlockX           96     0.004     0.065
 Flush           2035     0.168    15.403

Throughput 15.1506 MB/sec (sync open) (sync dirs)  2 clients  2 procs  max_latency=3370.725 ms
Dbench -D /mnt/sdb1 -s -S -t 60 2  1.85s user 5.99s system 10% cpu 1:12.03 total
Root@grml ~ #

Testy porównawcze z dd

Szybkość transferu:

root@grml ~ # dd if=/dev/zero of=/dev/sdb2 bs=1G count=1 oflag=direct  
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 15.1833 s, 70.7 MB/s
Root@grml ~ #

Opóźnienie:

root@grml ~ # dd if=/dev/zero of=/dev/sdb2 bs=512 count=1000 oflag=direct
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 0.0547037 s, 9.4 MB/s
Root@grml ~ #

Laptop (Cache dysku włączony)

dbench -D /mnt/sda1 -t 60 2

root@grml ~ # dbench -D /mnt/sda1 -t 60 2
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2       664    40.69 MB/sec  warmup   1 sec  latency 852.340 ms
[...]
   2     20734    23.38 MB/sec  warmup  11 sec  latency 174.694 ms
   2     25681    26.86 MB/sec  execute   1 sec  latency 168.871 ms
[...]
   2    163967    25.73 MB/sec  execute  59 sec  latency 153.734 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX      49257     0.067    98.105
 Close          36193     0.007    20.074
 Rename          2093     0.124    19.556
 Unlink          9951     0.362   240.017
 Qpathinfo      44725     0.036    26.750
 Qfileinfo       7820     0.005     0.879
 Qfsinfo         8199     0.231    24.821
 Sfileinfo       4027     0.050    25.416
 Find           17280     0.110    20.149
 WriteX         24417     0.110    29.875
 ReadX          77544     0.023    22.201
 LockX            164     0.014     1.023
 UnlockX          164     0.006     0.008
 Flush           3454    28.377   404.470

Throughput 25.7263 MB/sec  2 clients  2 procs  max_latency=404.480 ms
Dbench -D /mnt/sda1 -t 60 2  5.00s user 12.29s system 23% cpu 1:12.11 total
Root@grml ~ #

dbench -D /mnt/sda1 -s -S -t 60 2

root@grml ~ # dbench -D /mnt/sda1 -s -S -t 60 2
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2       126    11.25 MB/sec  warmup   1 sec  latency 38.711 ms
[...]
   2      4172     7.30 MB/sec  warmup  11 sec  latency 93.956 ms
   2      5933     6.86 MB/sec  execute   1 sec  latency 85.329 ms
[...]
   2     48454     7.89 MB/sec  execute  59 sec  latency 43.504 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX      15293     0.096    27.451
 Close          11286     0.005     0.597
 Rename           646     8.789   186.506
 Unlink          3035     7.628   129.604
 Qpathinfo      13933     0.032     2.644
 Qfileinfo       2449     0.005     0.954
 Qfsinfo         2494     0.203    13.581
 Sfileinfo       1244     0.121     7.909
 Find            5333     0.105    23.997
 WriteX          7573    11.293   517.348
 ReadX          24019     0.032    29.351
 LockX             50     0.008     0.010
 UnlockX           50     0.006     0.007
 Flush           1057     0.431    47.122

Throughput 7.8901 MB/sec (sync open) (sync dirs)  2 clients  2 procs  max_latency=517.357 ms
Dbench -D /mnt/sda1 -s -S -t 60 2  1.22s user 3.85s system 7% cpu 1:12.05 total
Root@grml ~ #

Testy porównawcze z dd

Szybkość transferu:

root@grml ~ # dd if=/dev/zero of=/dev/sda2 bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 32.474 s, 33.1 MB/s
Root@grml ~ #

Opóźnienie:

root@grml ~ # dd if=/dev/zero of=/dev/sda2 bs=512 count=1000 oflag=direct
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 0.36084 s, 1.4 MB/s
Root@grml ~ #

Laptop (cache dysku wyłączony)

dbench -D /mnt/sda1 -t 60 2

root@grml ~ # dbench -D /mnt/sda1 -t 60 2      
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2       664    40.69 MB/sec  warmup   1 sec  latency 856.989 ms
[...]
   2      2952     6.07 MB/sec  warmup  11 sec  latency 359.855 ms
   2      4332    10.26 MB/sec  execute   1 sec  latency 458.464 ms
[...]
   2     37694     6.22 MB/sec  execute  59 sec  latency 338.622 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX      12196     0.073    23.471
 Close           8964     0.004     0.179
 Rename           510     0.115    11.578
 Unlink          2463     1.942   948.565
 Qpathinfo      11038     0.030    13.100
 Qfileinfo       1908     0.005     0.759
 Qfsinfo         1996     0.173     5.760
 Sfileinfo        995     1.138    34.119
 Find            4208     0.105    21.999
 WriteX          5971     0.156    24.834
 ReadX          18673     0.022    20.102
 LockX             38     0.008     0.010
 UnlockX           38     0.006     0.007
 Flush            850   129.212   621.879

Throughput 6.2171 MB/sec  2 clients  2 procs  max_latency=948.585 ms
Root@grml ~ #

dbench -D /mnt/sda1 -s -S -t 60 2

root@grml ~ # dbench -D /mnt/sda1 -s -S -t 60 2
Dbench version 4.00 - Copyright Andrew Tridgell 1999-2004

Running for 60 seconds with load '/usr/share/dbench/client.Txt' and minimum warmup 12 secs
2 of 2 processes prepared for launch   0 sec
Releasing clients
   2        24     1.37 MB/sec  warmup   1 sec  latency 91.722 ms
[...]
   2       207     1.46 MB/sec  warmup  11 sec  latency 91.734 ms
   2       236     0.72 MB/sec  execute   1 sec  latency 556.435 ms
[...]
   2      5549     1.25 MB/sec  execute  59 sec  latency 92.558 ms
   2  cleanup  60 sec
   0  cleanup  60 sec

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX       1884     1.539   278.018
 Close           1481     0.005     0.019
 Rename            75    62.715   111.977
 Unlink           306    58.114   142.353
 Qpathinfo       1685     0.030     0.767
 Qfileinfo        391     0.005     0.006
 Qfsinfo          275     0.170     0.243
 Sfileinfo        172     2.171    22.756
 Find             609     0.195    22.485
 WriteX          1382    67.375   656.543
 ReadX           2600     0.199    22.949
 LockX              4     0.012     0.018
 UnlockX            4     0.007     0.008
 Flush            147     2.941    72.381

Throughput 1.25365 MB/sec (sync open) (sync dirs)  2 clients  2 procs  max_latency=656.554 ms
Root@grml ~ #

Testy porównawcze z dd

Szybkość transferu:

root@grml ~ # dd if=/dev/zero of=/dev/sda2 bs=1G count=1 oflag=direct    
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 123.37 s, 8.7 MB/s
Root@grml ~ #

Opóźnienie:

root@grml ~ # dd if=/dev/zero of=/dev/sda2 bs=512 count=1000 oflag=direct
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 11.1865 s, 45.8 kB/s
Root@grml ~ #

Odnośniki

  1. ↑ dbench README, dział realistic load? na końcu pliku
  2. ↑ vide "man dbench"
  3. ↑ http://www.Heise.De/open/Das-Dateisystem-Ext3-tunen--/artikel/104859
  4. ↑ http://samba.Org/ftp/tridge/dbench/
  5. ↑ http://www.Areca.Com.Tw/products/pcie.Htm

Dalsze informacje

Pomiar obciążenia CPU z mpstat w Linuksie

Program mpstat dostarcza informacji o wykorzystaniu poszczególnych procesorów systemu. W wielordzeniowym systemie każdy rdzeń widziany jest jako procesor. W systemach z procesorami z Hyperthreading jeden procesor / rdzeń widziany jest jako dwa rdzenie . Mpstat jest w dystrybucjach Linuksa często zawarty w pakiecie sysstat (vide np. W Debianie http://packages.Debian.Org/sysstat).

Spis treści

[ukryj]

Podstawowe informacje o mpstat

mpstat jest zazwyczaj uruchomiany z opcją mpstat -P ALL. Przez co wyświetlane są informacje o wszystkich poszczególnych procesorach. mpstat -P ALL pokazuje średnie wartości od ostatniego uruchomienia:

[root@centos4 ~]# mpstat -P ALL
Linux 2.6.9-023stab048.6-smp (centos4.Thomas-krenn.Com)         04/08/09

16:16:08     CPU   %user   %nice %system %iowait    %irq   %soft   %idle    intr/s
16:16:08     all    6.48    0.00    0.87    0.15    0.00    0.14   92.36   1130.51
16:16:08       0    6.38    0.00    0.88    0.15    0.00    0.14   92.44    141.31
16:16:08       1    6.29    0.00    0.85    0.14    0.00    0.14   90.99    141.31
16:16:08       2    6.60    0.00    0.87    0.15    0.00    0.14   91.81    141.31
16:16:08       3    6.81    0.00    0.87    0.14    0.00    0.14   90.47    141.31
16:16:08       4    6.48    0.00    0.86    0.15    0.00    0.14   92.36    141.31
16:16:08       5    6.23    0.00    0.85    0.15    0.00    0.13   91.04    141.31
16:16:08       6    6.37    0.00    0.87    0.15    0.00    0.14   92.03    141.31
16:16:08       7    6.21    0.00    0.84    0.14    0.00    0.13   91.08    141.31
[root@centos4 ~]#

Do analizy przez określony okres mogą zostać podane dwa dalsze parametry. mpstat -P ALL 1 60 odczytuje co sekundę aktualną wartość (60 razy = 1 min.). Ostatnia wartość pokazuje średnią wartość z okresu pomiaru. Możliwy jest wygodny zapis wyniku z mpstat -P ALL 1 60 do pliku:

[root@centos4 ~]# mpstat -P ALL 1 60 > /root/mpstatanalyse20090408-1.Txt
[root@centos4 ~]#

Oto fragment z tego pliku:

Linux 2.6.9-023stab048.6-smp (centos4.Thomas-krenn.Com)   04/08/09

15:55:53     CPU   %user   %nice %system %iowait    %irq   %soft   %idle    intr/s
15:55:54     all   22.88    0.00    1.29    0.00    0.00    0.26   75.58   1590.82
15:55:54       0   34.69    0.00    6.12    0.00    0.00    0.00   59.18    198.98
15:55:54       1   17.35    0.00    0.00    0.00    0.00    0.00   80.61    198.98
15:55:54       2    9.18    0.00    1.02    0.00    0.00    0.00   91.84    198.98
15:55:54       3   13.27    0.00    1.02    0.00    0.00    1.02   81.63    198.98
15:55:54       4   31.63    0.00    2.04    0.00    0.00    0.00   67.35    198.98
15:55:54       5    4.08    0.00    0.00    0.00    0.00    0.00   93.88    197.96
15:55:54       6   71.43    0.00    0.00    0.00    0.00    1.02   29.59    198.98
15:55:54       7    0.00    0.00    0.00    0.00    0.00    0.00   96.94    198.98

[...]

15:56:52     CPU   %user   %nice %system %iowait    %irq   %soft   %idle    intr/s
15:56:53     all   25.26    0.00    1.41    0.77    0.00    0.26   72.31   1237.50
15:56:53       0   12.50    0.00    0.00    0.00    0.00    0.00   87.50    155.21
15:56:53       1   40.62    0.00    2.08    0.00    0.00    1.04   60.42    155.21
15:56:53       2    1.04    0.00    1.04    0.00    0.00    1.04  100.00    155.21
15:56:53       3   35.42    0.00    0.00    0.00    0.00    1.04   65.62    154.17
15:56:53       4    8.33    0.00    2.08    0.00    0.00    0.00   90.62    155.21
15:56:53       5   35.42    0.00    3.12    7.29    0.00    0.00   56.25    155.21
15:56:53       6   63.54    0.00    1.04    0.00    0.00    1.04   36.46    154.17
15:56:53       7    8.33    0.00    1.04    0.00    0.00    0.00   90.62    154.17

Average:     CPU   %user   %nice %system %iowait    %irq   %soft   %idle    intr/s
Average:     all   21.58    0.00    1.83    0.59    0.00    0.34   75.66   1417.71
Average:       0   21.87    0.00    2.07    0.32    0.00    0.36   75.38    177.21
Average:       1   20.97    0.00    1.50    0.82    0.00    0.29   75.28    177.21
Average:       2   19.76    0.00    1.68    0.07    0.02    0.34   78.03    177.23
Average:       3   23.98    0.00    1.95    0.05    0.00    0.37   72.49    177.21
Average:       4   23.02    0.00    1.63    0.53    0.00    0.32   74.49    177.21
Average:       5   20.29    0.00    1.65    1.53    0.00    0.36   75.02    177.21
Average:       6   25.95    0.00    2.21    0.08    0.00    0.34   71.27    177.21
Average:       7   15.75    0.00    1.80    1.31    0.00    0.31   79.63    177.21

Znaczenie poszczególnych wartości

(Quelle man mpstat):

  • CPU: Processor number. The keyword all indicates that statistics are calculated as averages among all processors.
  • %user: Show the percentage of CPU utilization that occurred while executing at the user level (application).
  • %nice: Show the percentage of CPU utilization that occurred while executing at the user level with nice priority.
  • %sys: Show the percentage of CPU utilization that occurred while executing at the system level (kernel). Note that this does not include time spent servicing interrupts or softirqs.
  • %iowait: Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
  • %irq: Show the percentage of time spent by the CPU or CPUs to service interrupts.
  • %soft: Show the percentage of time spent by the CPU or CPUs to service softirqs. A softirq (software interrupt) is one of up to 32 enumerated software interrupts which can run on multiple CPUs at once.
  • %steal: Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor.
  • %idle: Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.
  • intr/s: Show the total number of interrupts received per second by the CPU or CPUs.

Analiza

Wykorzystanie poszczególnych procesorów / rdzeni

W systemie z kilkoma procesorami lub rdzeniami jest zalecane, w miarę możliwości, ich równomierne obciążenie. Jeśli średnia z mpstat -P ALL pokazuje jeden procesor ze zbyt dużym udziałem %user, inne procesory zaś ze zbyt niskim udziałem, to przez optymalizację konfiguracji aplikacji może zostać zwiększona całkowita wydajność systemu. Bank danych, który korzysta tylko z pojedynczego theadu / procesu może wykorzystywać tylko jeden rdzeń.

=Okres analizy

mpstat -P ALL dostarcza średnią od ostatniego uruchomienia (przez co również zawiera czas niskiego obciążenia - nocą i w weekend), dlatego może zostać przeprowadzony przez mpstat -P ALL 1 600 > /root/mpstatanalyse.Txt 10-minutowy pomiar w okresie maks. Obciążenia. Na końcu tego pomiaru udostępniana jest średnia z tych 10 minut.

Pliki archiwum w Linuksie

Chcemy tutaj krótko przedstawić różne formaty archiwum w Linuksie.

Spis treści

[ukryj]
1 tar 2 gz 3 bz2 4 zip

tar

Rozpakowanie jednego archiwum:

 tar xfv archiwum.Tar (x = extract - ekstrakcja plików z archiwum, f = file - plik archiwum, v = verbose - tryb gadatliwy)

Tworzenie archiwum plików / katalogów:

 tar cfv archiwum.Tar zawartosc1 zawartosc2 zawartosc3 (c = create - twórz archiwum)

Tworzenie skompresowanego archiwum:

 tar cfzv archiwum.Tar zawartosc1 zawartosc2 zawartosc3 (z = kompresja gzip)

Odczyt zawartości archiwum:

 tar tfv archiwum.Tar

gz

Kompresja pliku

 gzip plik

Wynik: plik.Gz

Dekompresja pliku:

 gunzip plik

Zgromadzenie plików w jednym skompresowanym archiwum:

 tar cfvz archiwum.Tar.Gz plik1 plik2

Wynik: archiwum.Tar.Gz

Dekompresja archiwum:

 tar xfvz archiwum.Tar.Gz

bz2

Kompresja pliku

 bzip2 plik

Wynik: plik.Bz2

Dekompresja pliku:

 bunzip2 plik.Bz2

Zgromadzenie plików w jednym skompresowanym archiwum:

 tar cfvj archiwum.Tar.Bz2 plik1 plik2

Wynik: archiwum.Tar.Bz2

Dekompresja archiwum:

 tar xfvj archiwum.Tar.Bz2

zip

Zgromadzenie plików w jednym skompresowanym archiwum:

 zip archiwum.Zip plik1 plik2

Zgromadzenie kompletnych katalogów w jednym skompresowanym archiwum:

 zip -r archiwum.Zip katalog1 katalog2 katalog3

Dekompresja archiwum:

 unzip archiwum.Zip

Odczyt zawartości archiwum:

 unzip -l archiwum.Zip

Kolejne parametry i funkcje odpowiedniego programu opisane są na jego stronie MAN. Np. W przypadku programu tar to:

 man tar

Podstawowe informacje o Page Cache w Linuksie

Page Cache w Linuksie przyspiesza odczyt plików. Realizowane jest to przez Linux, który buforuje przy pierwszym odczycie lub zapisie na urządzenia magazynujące, takie jak HDD, dane dodatkowo w niewykorzystywanym obszarze pamięci RAM. Jeśli dane te są później ponownie czytane to może to zostać szybko przeprowadzone z RAM-u. Artykuł ten zawiera ważne podstawowe informacje o Page Cache.

Spis treści

[ukryj]

Page Cache lub Buffer Cache

Często wykorzystywane jest dla Page Cache również pojęcie Buffer Cache. W jądrze Linuksa do wersji 2.2 dostępny był zarówno Page Cache jak i Buffer Cache. Z jądrem 2.4 oba cache zostały połączone. Dzisiaj dostępny jest tylko jeden cache, Page Cache.[1]

Sposób funkcjonowania

Wykorzystanie

W Linuksie polecenie free -m podaje w kolumnie cached ile MB pamięci RAM jest aktualnie wykorzystywane przez Page Cache:

[root@testserver ~]# free -m
             Total       used       free     shared    buffers     cached
Mem:         15976      15195        781          0        167       9153
-/+ buffers/cache:       5874      10102
Swap:         2000          0       1999
[root@testserver ~]#

Zapis

Jeżeli dane są zapisywane to najpierw trafiają one do Page Cache i są przechowywane jako Dirty Pages. Dirty, ponieważ te dane znajdują się w Page Cache i muszą jeszcze zostać zapisane na urządzeniu magazynującym. Zawartość Dirty Pages jest regularnie (lub poleceniem systemowym jak sync i fsync) zapisywana na urządzeniu magazynującym. Może to być kontroler RAID lub bezpośrednio dysk.

Następujący przykład pokazuje utworzenie pliku o wielkości 10 MByte, który jest najpierw zapisywany w Page Cache. Objętość Dirty Pages rośnie przez to, aż jak w tym przypadku poleceniem sync zostanie zapisany na SSD:

wfischer@pc:~$ dd if=/dev/zero of=testfile.Txt bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0,0121043 s, 866 MB/s
Wfischer@pc:~$ cat /proc/meminfo | grep Dirty
Dirty:             10260 kB
Wfischer@pc:~$ sync
Wfischer@pc:~$ cat /proc/meminfo | grep Dirty
Dirty:                 0 kB

do jądra 2.6.31: pdflush

Do włącznie jądra Linuksa 2.6.31 wątki pdflush zapewniały, że Dirty Pages były regularnie zapisywane na urządzeniu magazynującym.

od jądra 2.6.32: Per-backing-device based writeback

Ponieważ pdflush miał pewne wady wydajnościowe Jens Axboe opracował dla jądra Linuksa 2.6.32 nowy efektywniejszy mechanizm writeback.[2]

Dostępne są przy tym wątki dla każdego urządzenia, jak jest to pokazane w następującym przykładzie komputera z jednym dyskiem SSD (/dev/sda) i jednym HDD (/dev/sdb):

root@pc:~# ls -l /dev/sda
Brw-rw---- 1 root disk 8, 0 2011-09-01 10:36 /dev/sda
Root@pc:~# ls -l /dev/sdb
Brw-rw---- 1 root disk 8, 16 2011-09-01 10:36 /dev/sdb
Root@pc:~# ps -eaf | grep -i flush
Root       935     2  0 10:36 ?        00:00:00 [flush-8:0]
Root       936     2  0 10:36 ?        00:00:00 [flush-8:16]

Odczyt

Nie tylko przy zapisie, również przy odczycie dane trafiają najpierw do Page Cache. Jeżeli np. Plik o wielkości 100 MB jest dwukrotnie czytany to drugi odczyt jest szybszy, ponieważ jest przeprowadzany bezpośrednio z Page Cache w pamięci RAM i nie musi być czytany z dysku. Następujący przykład pokazuje, że po odtworzeniu filmu o wielkości 200MB wielkość Page Cache'u wzrosła:

user@adminpc:~$ free -m
             Total       used       free     shared    buffers     cached
Mem:          3884       1812       2071          0         60       1328
-/+ buffers/cache:        424       3459
Swap:         1956          0       1956
User@adminpc:~$ vlc video.Avi
[...]
User@adminpc:~$ free -m
             Total       used       free     shared    buffers     cached
Mem:          3884       2056       1827          0         60       1566
-/+ buffers/cache:        429       3454
Swap:         1956          0       1956
User@adminpc:~$

Jeśli Linux potrzebuje więcej RAM-u dla normalnych aplikacji niż obecnie jest dostępnych, to dłużej niewykorzystywane obszary Page Cache'u są automatycznie kasowane.

Optymalizacja Page Cache

Automatyczne buforowanie bloków plików w Page Cache jest często korzystne. Niektóre dane (jak logi lub MySQL-Dumps) często po zapisie nie są więcej potrzebne i zajmują często niepotrzebnie miejsce w Page Cache. Inne dane, których buforowanie przyniosłoby większe korzyści nie mogą przez to zostać zapisane w Page Cache'u.[3]

W przypadku logów pomocnym jest np. Regularny Logrotate z kompresją gzip. Jeżeli log o wielkości np. 500 MB przez logrotate i gzip zostanie skompresowany do 10 MB, to wyjściowy log i przez to jego cache'owana kopia stają się nieważne. 490 MB w Page Cache staje się przez to wolne. Zagrożenie, że przez ciągle rosnące logi zostaną "wypchnięte" z Page Cache'u bardziej przydatne dane w ten sposób maleje.

Rozsądnym jest dlatego, aby niektóre aplikacje nie buforowały określonych plików/ bloków plików. Dla rsync-u dostępny jest aktualnie patch. [4]

Odnośniki

  1. ↑ Der Buffer-Cache (Kapitel 15.3) Seite 348, Linux-Kernel Handbuch: Leitfaden zu Design und Implementierung von Kernel 2.6, Robert Love, Addison-Wesley, 2005
  2. ↑ Linux 2.6. – 32 Per-backing-device based writeback (kernelnewbies.Org)
  3. ↑ Clearing The Linux Buffer Cache (blog.Straylightrun.Net, 03.12.2009)
  4. ↑ Improving Linux performance by preserving Buffer Cache State (insights.Oetiker.Ch)

Dalsze informacje

Pomiar wydajności z vmstat w Linuksie

vmstat (virtual memory statistics) jest wartościowym narzędziem monitoringu, które dostarcza obok informacji o pamięci również informacje o Block IO jak i aktywności CPU.

Spis treści

[ukryj]

Podstawowe informacje o vmstat

vmstat dostarcza cały rząd wartości i jest typowo przywoływany z dwoma numerycznymi parametrami:

  • Przykład: vmstat 1 5
    • 1 -> wartości są mierzone i dostarczane co sekundę
    • 5 -> wartości zostaną 5x dostarczone, następnie program zostanie zakończony

Pierwszy wiersz wyniku zawiera średnie wartości od ostatniego restartu. Pozostałe wiersze wyniku przedstawiają aktualne wartości. Vmstat nie wymaga żadnych specjalnych uprawnień użytkownika, może zostać wykonany przez zwykłego użytkownika.

[user@fedora9 ~]$ vmstat 1 5
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      0  44712 110052 623096    0    0    30    28  217  888 13  3 83  1  0
 0  0      0  44408 110052 623096    0    0     0     0   88 1446 31  4 65  0  0
 0  0      0  44524 110052 623096    0    0     0     0   84  872 11  2 87  0  0
 0  0      0  44516 110052 623096    0    0     0     0  149 1429 18  5 77  0  0
 0  0      0  44524 110052 623096    0    0     0     0   60  431 14  1 85  0  0
[user@fedora9 ~]$

Znaczenie poszczególnych wartości

(Quelle man vmstat):

  • Procs
    • r: The number of processes waiting for run time.
    • b: The number of processes in uninterruptible sleep.
  • Memory
    • swpd: the amount of virtual memory used.
    • free: the amount of idle memory.
    • buff: the amount of memory used as buffers.
    • cache: the amount of memory used as cache.
    • inact: the amount of inactive memory. (-a option)
    • active: the amount of active memory. (-a option)
  • Swap
    • si: Amount of memory swapped in from disk (/s).
    • so: Amount of memory swapped to disk (/s).
  • IO
    • bi: Blocks received from a block device (blocks/s).
    • bo: Blocks sent to a block device (blocks/s).
  • System
    • in: The number of interrupts per second, including the clock.
    • cs: The number of context switches per second.
  • CPU
    • These are percentages of total CPU time.
    • us: Time spent running non-kernel code. (user time, including nice time)
    • sy: Time spent running kernel code. (system time)
    • id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
    • wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
    • st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

Przykłady

Przykład: Obciążenie CPU user

W tym przykładzie za pośrednictwem lame Encoder[1] konwertowany jest normalny plik audio w plik MP3. Ta procedura bardzo obciąża CPU, co pokazuje równolegle uruchomiony vmstat poprzez user CPU time rzędu 97%:

[user@fedora8 ~]$ vmstat 1 5
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 6  1      0 302380  16356 271852    0    0   561   568   80  590 43  7 43  7  0
 1  0      0 300892  16364 273256    0    0     0    52   79  274 97  3  0  0  0
 2  0      0 299544  16364 274532    0    0     0     0   78  372 97  3  0  0  0
 1  0      0 298292  16368 275780    0    0     0     0   53  255 97  3  0  0  0
 1  0      0 296820  16368 277192    0    0     0     0   77  377 97  3  0  0  0
[user@fedora8 ~]$

Przykład: Obciążenie CPU system

W tym przykładzie przez dd zapisywany jest plik z losową zawartością:

[user@fedora9 ~]$ dd if=/dev/urandom of=500MBfile bs=1M count=500

/dev/urandom[2] dostarcza tutaj losowe cyfry, które obliczane są przez jądro. Generuje to wysokie obciążenie dla CPU (sy - system time). vmstat pokazuje tutaj, że procesor w trakcie wykonywania kodu jądra jest obciążony na poziomie pomiędzy 93% i 97% (w tym przypadku generowaniem losowych cyfr).

[user@fedora9 ~]$ vmstat 1 5
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0 402944  54000 161912 745324    5   14    54    59  221  867 13  3 82  2  0
 1  0 402944  53232 161916 748396    0    0     0     0   30  213  3 97  0  0  0
 1  0 402944  49752 161920 751452    0    0     0     0   28  290  4 96  0  0  0
 1  0 402944  45804 161924 755564    0    0     0     0   29  188  2 98  0  0  0
 1  0 402944  42568 161936 758608    0    0     0 17456  272  509  7 93  0  0  0
[user@fedora9 ~]$

Czas wykonania system calls[3][4][5] zalicza się do system time (sy).

Przykład: Brak wolnej pamięci RAM (swapping)

W tym przykładzie są otwarte liczne aplikacje (między innymi VirtualBox i Windows jako system gościa). Prawie cały RAM jest zajęty. Następnie zostaje uruchomiona następna aplikacja (OpenOffice). Jądro Linuksa magazynuje teraz dane w partycji swap na HDD, aby pozyskać RAM dla aplikacji OpenOffice. To magazynowanie danych na partycji swap jest widoczne w vmstat następująco (swap out - memory swapped to disk):

[user@fedora8 ~]$ vmstat 1 5
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  1 244208  10312   1552  62636    4   23    98   249   44  304 28  3 68  1  0
 0  2 244920   6852   1844  67284    0  544  5248   544  236 1655  4  6  0 90  0
 1  2 256556   7468   1892  69356    0 3404  6048  3448  290 2604  5 12  0 83  0
 0  2 263832   8416   1952  71028    0 3788  2792  3788  140 2926 12 14  0 74  0
 0  3 274492   7704   1964  73064    0 4444  2812  5840  295 4201  8 22  0 69  0
[user@fedora8 ~]$

Przykład: wysokie obciążenie odczytu IO

Tutaj za pomocą dd wczytywany jest plik (np. ISO-File) i zapisywany w /dev/null:

[user@fedora9 ~]$ dd if=bigfile.Iso of=/dev/null bs=1M

vmstat wskazuje tutaj podwyższone obciążenie odczytu IO (wartość bi):

[user@fedora9 ~]$ vmstat 1 5
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  1 465872  36132  82588 1018364    7   17    70   127  214  838 12  3 82  3  0
 0  1 465872  33796  82620 1021820    0    0 34592     0  357  781  6 10  0 84  0
 0  1 465872  36100  82656 1019660    0    0 34340     0  358  723  5  9  0 86  0
 0  1 465872  35744  82688 1020416    0    0 33312     0  345  892  8 11  0 81  0
 0  1 465872  35716  82572 1020948    0    0 34592     0  358  738  7  8  0 85  0
[user@fedora9 ~]$ 

Przykład: wysokie obciążenie zapisu IO

Za pośrednictwem dd czytane są dane z /dev/zero i zapisywane do pliku. Oflag=dsync sprawia, że dane natychmiast są zapisywane na HDD (nie tylko w Page Cache):

[user@fedora9 ~]$ dd if=/dev/zero of=500MBfile bs=1M count=500 oflag=dsync

vmstat wskazuje tutaj podwyższone obciążenie zapisu IO (wartość bo):

[user@fedora9 ~]$ vmstat 1 5
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  1      0  35628  14700 1239164    0    0  1740   652  117  601 11  4 66 20  0
 0  1      0  34852  14896 1239788    0    0     0 23096  300  573  3 16  0 81  0
 0  1      0  32780  15080 1241304    0    0     4 21000  344  526  1 13  0 86  0
 0  1      0  36512  15244 1237256    0    0     0 19952  276  394  1 12  0 87  0
 0  1      0  35688  15412 1237180    0    0     0 18904  285  465  1 13  0 86  0
[user@fedora9 ~]$ 

Przykład: CPU czeka na IO

W następującym przykładzie aktualnie w toku jest proces updatedb. Narzędzie updatedb jest częścią mlocate. Przeszukuje kompletny system plików i następnie tworzy bank danych dla komendy locate (przez którą pliki mogą zostać bardzo szybko wyszukane). Ponieważ updatedb musi wczytać wszystkie nazwy plików z kompletnego systemu plików to CPU musi ciągle czekać na dane z systemu IO (HDD). Dlatego vmstat wskazuje wysoką wartość dla CPU (waiting for IO):

[user@fedora9 ~]$ vmstat 1 5
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  1 403256 602848  17836 400356    5   15    50    50  207  861 13  3 83  1  0
 1  0 403256 601568  18892 400496    0    0  1048   364  337 1903  5  7  0 88  0
 0  1 403256 600816  19640 400568    0    0   748     0  259 1142  6  4  0 90  0
 0  1 403256 600300  20116 400800    0    0   476     0  196  630  8  5  0 87  0
 0  1 403256 599328  20792 400792    0    0   676     0  278 1401  7  5  0 88  0
[user@fedora9 ~]$

Dalsze opcje vmstat

vmstat --help

[user@fedora9 ~]$ vmstat --help
Usage: vmstat [-V] [-n] [delay [count]]
              -V prints version.
              -n causes the headers not to be reprinted regularly.
              -a print inactive/active page stats.
              -d prints disk statistics
              -D prints disk table
              -p prints disk partition statistics
              -s prints vm table
              -m prints slabinfo
              -S unit size
              Delay is the delay between updates in seconds. 
              Unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)
              Count is the number of updates.
[user@fedora9 ~]$

vmstat

[user@fedora9 ~]$ vmstat
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0  14960  38016   6584 1069284    0    1   506    81  727 1373 12  4 81  3  0
[user@fedora9 ~]$

vmstat -V

[user@fedora9 ~]$ vmstat -V
Procps version 3.2.7
[user@fedora9 ~]$

vmstat -a

[user@fedora9 ~]$ vmstat -a
Procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 R  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 3  0  14960  38024 988284 461704    0    1   506    81  726 1372 12  4 81  3  0
[user@fedora9 ~]$

vmstat -d

[user@fedora9 ~]$ vmstat -d
Disk- ------------reads------------ ------------writes----------- -----IO------
       Total merged sectors      ms  total merged sectors      ms    cur    sec
Ram0       0      0       0       0      0      0       0       0      0      0
Ram1       0      0       0       0      0      0       0       0      0      0
Ram2       0      0       0       0      0      0       0       0      0      0
Ram3       0      0       0       0      0      0       0       0      0      0
Ram4       0      0       0       0      0      0       0       0      0      0
Ram5       0      0       0       0      0      0       0       0      0      0
Ram6       0      0       0       0      0      0       0       0      0      0
Ram7       0      0       0       0      0      0       0       0      0      0
Ram8       0      0       0       0      0      0       0       0      0      0
Ram9       0      0       0       0      0      0       0       0      0      0
Ram10      0      0       0       0      0      0       0       0      0      0
Ram11      0      0       0       0      0      0       0       0      0      0
Ram12      0      0       0       0      0      0       0       0      0      0
Ram13      0      0       0       0      0      0       0       0      0      0
Ram14      0      0       0       0      0      0       0       0      0      0
Ram15      0      0       0       0      0      0       0       0      0      0
Sda   136909  31536 13893867 1197609  58190 219323 2233264 7688807      0    677
Sda1   35703   6048 1326394  511477   6728  16136  182984  419232      0    222
Sda2      85   1489    2935     653    141   3603   29952    5254      0      1
Sda3  101111  23961 12564154  685330  51321 199584 2020328 7264321      0    512
Sr0        0      0       0       0      0      0       0       0      0      0
Fd0        0      0       0       0      0      0       0       0      0      0
[user@fedora9 ~]

vmstat -D

[user@fedora9 ~]$ vmstat -D
           22 disks 
            0 partitions 
       273820 total reads
        63034 merged reads
     27787446 read sectors
      2395193 milli reading
       116450 writes
       438666 merged writes
      4467248 written sectors
     15377932 milli writing
            0 inprogress IO
         1412 milli spent IO

vmstat -p

vmstat -p nie funkcjonuje na Fedorze: https://bugzilla.Redhat.Com/show_bug.Cgi?Id=485246. Następujący wynik pochodzi z systemu Ubuntu 9.10:

user@ubuntu-9-10:~$ vmstat -p /dev/sda9
Sda9          reads   read sectors  writes    requested writes
               23420     411365      24464     530801
User@ubuntu-9-10:~$

vmstat -s

[user@fedora9 ~]$ vmstat -s
      1553972  total memory
      1516180  used memory
       461892  active memory
       988304  inactive memory
        37792  free memory
         6644  buffer memory
      1069388  swap cache
      1052248  total swap
        14960  used swap
      1037288  free swap
       161467 non-nice user cpu ticks
         7586 nice user cpu ticks
        46310 system cpu ticks
      1108919 idle cpu ticks
        46832 IO-wait cpu ticks
         2694 IRQ cpu ticks
         2452 softirq cpu ticks
            0 stolen cpu ticks
      6947021 pages paged in
      1116896 pages paged out
          183 pages swapped in
         3744 pages swapped out
      9985406 interrupts
     18852586 CPU context switches
   1239004323 boot time
        15072 forks
[user@fedora9 ~]$

vmstat -m

[user@fedora9 ~]$ vmstat -m
Cache                       Num  Total   Size  Pages
Fuse_request                 11     11    368     11
Fuse_inode                    9      9    448      9
Rpc_inode_cache               8      8    512      8
Nf_conntrack_expect           0      0    168     24
Nf_conntrack                 26     80    248     16
Dm_uevent                     0      0   2464      3
UDPv6                        22     22    704     11
TCPv6                         6      6   1344      6
Kmalloc_dma-512               8      8    512      8
Sgpool-128                   12     12   2048      4
Scsi_io_context               0      0    104     39
Ext3_inode_cache           6822   8360    496      8
Ext3_xattr                   85     85     48     85
Journal_handle              170    170     24    170
Journal_head                 76    219     56     73
Revoke_record               256    256     16    256
Flow_cache                    0      0     80     51
Bsg_cmd                       0      0    288     14
Mqueue_inode_cache            7      7    576      7
Isofs_inode_cache             0      0    376     10
Hugetlbfs_inode_cache        11     11    344     11
Dquot                         0      0    128     32
Shmem_inode_cache          1058   1071    448      9
Xfrm_dst_cache                0      0    320     12
UDP                          19     21    576      7
TCP                          17     24   1216      6
Blkdev_queue                 21     21   1080      7
Biovec-256                    2      2   3072      2
Biovec-128                    5      5   1536      5
Biovec-64                     7     10    768      5
Sock_inode_cache            619    650    384     10
File_lock_cache              39     39    104     39
Acpi-Operand               2935   2958     40    102
Acpi-Namespace             1700   1700     24    170
Cache                       Num  Total   Size  Pages
Taskstats                    25     26    312     13
Proc_inode_cache            233    242    360     11
Sigqueue                     28     28    144     28
Radix_tree_node            7888   8606    296     13
Bdev_cache                   24     24    512      8
Inode_cache                 370    462    344     11
Dentry                     6592  15390    136     30
Names_cache                   2      2   4096      2
Avc_node                     73     73     56     73
Selinux_inode_security     9888  10030     48     85
Idr_layer_cache             627    644    144     28
Buffer_head                2308   2688     64     64
Mm_struct                   659    693    448      9
Vm_area_struct            11110  11592     88     46
Files_cache                 115    130    384     10
Sighand_cache               141    150   1344      6
Task_struct                 246    248   3696      2
Anon_vma                   4778   5120     16    256
Kmalloc-4096                 95    112   4096      8
Kmalloc-2048                272    304   2048     16
Kmalloc-1024                518    524   1024      4
Kmalloc-512                 764    888    512      8
Kmalloc-256                 198    208    256     16
Kmalloc-128                 629    832    128     32
Kmalloc-64                 4322   5568     64     64
Kmalloc-32                 1554   1664     32    128
Kmalloc-16                 2644   3584     16    256
Kmalloc-8                  3561   3584      8    512
Kmalloc-192                6349   6930    192     21
Kmalloc-96                  885   1176     96     42
[user@fedora9 ~]$ 

Odnośniki

  1. ↑ http://lame.Sourceforge.Net/
  2. ↑ http://de.Wikipedia.Org/wiki//dev/random
  3. ↑ http://de.Wikipedia.Org/wiki/Systemaufruf
  4. ↑ http://www.Softpanorama.Org/Internals/unix_system_calls.Shtml
  5. ↑ http://www.Ibm.Com/developerworks/linux/library/l-system-calls/

Pomiar wydajności z iostat w Linuksie

Aplikacja iostat dostarcza statystyki Input/Output dla urządzeń, partycji i sieciowych systemów plików (NFS) oraz CPU. Iostat jest częścią pakietu sysstat.

Spis treści

[ukryj]

Informacje podstawowe o iostat

iostat dostarcza różne wartości i zazwyczaj jest przeprowadzany z 2 numerycznymi parametrami:

  • Przykład: iostat 1 5
    • 1 -> wartości są co sekundę mierzone i wyświetlane
    • 5 -> wartości są wyświetlane 5 razy, następnie aplikacja jest zamykana.

Pierwszy wiersz wyniku zawiera średnią wartość od ostatniego restartu. Wszystkie dalsze wiersze wyniku przedstawiają poszczególne aktualne wartości. Iostat nie wymaga żadnych specjalnych uprawnień i może zostać przeprowadzony jako zwykły użytkownik. Die erste Ausgabezeile enthält dabei die Durchschnittswerte seit dem letzten Reboot. Alle weiteren Ausgabezeilen stellen die jeweils aktuellen Werte dar. Iostat benötigt keine speziellen Benutzerrechte, man kann es also als normaler Benutzer ausführen.

user@ubuntu-9-10:~$ iostat -x 1 5
Linux 2.6.31-20-generic-pae (ubuntu-9-10) 	04/08/2010 	_i686_	(4 CPU)

Avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38    0.07    0.66    0.39    0.00   96.51

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
Sda               6.93       131.80        85.02    1347350     869177

Avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.95    0.00    2.65    6.27    0.00   83.13

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
Sda             340.00      2720.00         0.00       2720          0

Avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.19    0.00    4.32    5.76    0.00   82.73

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
Sda             440.59      3524.75         0.00       3560          0
[...]

Opcje w iostat

iostat

Bez specjalnego parametru wynik wygląda następująco:

user@ubuntu-9-10:~$ iostat 
Linux 2.6.31-20-generic-pae (ubuntu-9-10) 	04/08/2010 	_i686_	(4 CPU)

Avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38    0.07    0.66    0.39    0.00   96.50

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
Sda               7.19       130.01        87.95    1380622     933921

User@ubuntu-9-10:~$ 

iostat -x

Opcja -x dostarcza rozszerzone (extended) statystyki:

user@ubuntu-9-10:~$ iostat -x
Linux 2.6.31-20-generic-pae (ubuntu-9-10) 	04/08/2010 	_i686_	(4 CPU)

Avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38    0.07    0.66    0.39    0.00   96.50

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
Sda               2.05     8.14    4.31    2.87   129.76    87.85    30.31     0.13   18.47   3.13   2.25

User@ubuntu-9-10:~$ 

iostat -d

Opcja -d pokazuje tylko statystyki urządzeń (brak statystyk CPU):

user@ubuntu-9-10:~$ iostat -d
Linux 2.6.31-20-generic-pae (ubuntu-9-10) 	04/08/2010 	_i686_	(4 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
Sda               7.18       129.63        87.83    1380622     935433

User@ubuntu-9-10:~$ 

iostat -c

Opcja -c pokazuje tylko statystyki CPU (brak statystyk urządzeń):

user@ubuntu-9-10:~$ iostat -c
Linux 2.6.31-20-generic-pae (ubuntu-9-10) 	04/08/2010 	_i686_	(4 CPU)

Avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38    0.07    0.66    0.39    0.00   96.50

User@ubuntu-9-10:~$ 

Znaczenie poszczególnych wartości

(Quelle man iostat)

CPU Utilization Report

  • %user: Show the percentage of CPU utilization that occurred while executing at the user level (application).
  • %nice: Show the percentage of CPU utilization that occurred while executing at the user level with nice priority.
  • %system: Show the percentage of CPU utilization that occurred while executing at the system level (kernel).
  • %iowait: Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
  • %steal: Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor.
  • %idle: Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.

Device Utilization Report

  • Device: This column gives the device (or partition) name
  • tps Indicate the number of transfers per second that were issued to the device. A transfer is an I/O request to the device. Multiple logical requests can be combined into a single I/O request to the device. A transfer is of indeterminate size.
  • Blk_read/s: Indicate the amount of data read from the device expressed in a number of blocks per second. Blocks are equivalent to sectors with kernels 2.4 and later and therefore have a size of 512 bytes. With older kernels, a block is of indeterminate size.
  • Blk_wrtn/s: Indicate the amount of data written to the device expressed in a number of blocks per second.
  • Blk_read: The total number of blocks read.
  • Blk_wrtn: The total number of blocks written.
  • kB_read/s: Indicate the amount of data read from the device expressed in kilobytes per second.
  • kB_wrtn/s: Indicate the amount of data written to the device expressed in kilobytes per second.
  • kB_read: The total number of kilobytes read.
  • kB_wrtn: The total number of kilobytes written.
  • MB_read/s: Indicate the amount of data read from the device expressed in megabytes per second.
  • MB_wrtn/s: Indicate the amount of data written to the device expressed in megabytes per second.
  • MB_read: The total number of megabytes read.
  • MB_wrtn: The total number of megabytes written.
  • rrqm/s: The number of read requests merged per second that were queued to the device.
  • wrqm/s: The number of write requests merged per second that were queued to the device.
  • r/s: The number of read requests that were issued to the device per second.
  • w/s: The number of write requests that were issued to the device per second.
  • rsec/s: The number of sectors read from the device per second.
  • wsec/s: The number of sectors written to the device per second.
  • rkB/s: The number of kilobytes read from the device per second.
  • wkB/s: The number of kilobytes written to the device per second.
  • rMB/s: The number of megabytes read from the device per second.
  • wMB/s: The number of megabytes written to the device per second.
  • avgrq-sz: The average size (in sectors) of the requests that were issued to the device.
  • avgqu-sz: The average queue length of the requests that were issued to the device.
  • await: The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.
  • svctm: The average service time (in milliseconds) for I/O requests that were issued to the device.
  • %util: Percentage of CPU time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.

Network Filesystem Report

  • Filesystem: This columns shows the hostname of the NFS server followed by a colon and by the directory name where the network filesystem is mounted.
  • rBlk_nor/s: Indicate the number of blocks read by applications via the read(2) system call interface. A block has a size of 512 bytes.
  • wBlk_nor/s: Indicate the number of blocks written by applications via the write(2) system call interface.
  • rBlk_dir/s: Indicate the number of blocks read from files opened with the O_DIRECT flag.
  • wBlk_dir/s: Indicate the number of blocks written to files opened with the O_DIRECT flag.
  • rBlk_svr/s: Indicate the number of blocks read from the server by the NFS client via an NFS READ request.
  • wBlk_svr/s: Indicate the number of blocks written to the server by the NFS client via an NFS WRITE request.
  • rkB_nor/s: Indicate the number of kilobytes read by applications via the read(2) system call interface.
  • wkB_nor/s: Indicate the number of kilobytes written by applications via the write(2) system call interface.
  • rkB_dir/s: Indicate the number of kilobytes read from files opened with the O_DIRECT flag.
  • wkB_dir/s: Indicate the number of kilobytes written to files opened with the O_DIRECT flag.
  • rkB_svr/s: Indicate the number of kilobytes read from the server by the NFS client via an NFS READ request.
  • wkB_svr/s: Indicate the number of kilobytes written to the server by the NFS client via an NFS WRITE request.
  • rMB_nor/s: Indicate the number of megabytes read by applications via the read(2) system call interface.
  • wMB_nor/s: Indicate the number of megabytes written by applications via the write(2) system call interface.
  • rMB_dir/s: Indicate the number of megabytes read from files opened with the O_DIRECT flag.
  • wMB_dir/s: Indicate the number of megabytes written to files opened with the O_DIRECT flag.
  • rMB_svr/s: Indicate the number of megabytes read from the server by the NFS client via an NFS READ request.
  • wMB_svr/s: Indicate the number of megabytes written to the server by the NFS client via an NFS WRITE request.
  • ops/s: Indicate the number of operations that were issued to the filesystem per second.
  • rops/s: Indicate the number of 'read' operations that were issued to the filesystem per second.
  • wops/s: Indicate the number of 'write' operations that were issued to the filesystem per second.

Dalsze informacje

Dwa default gateway w jednym systemie

Artykuł ten opisuje konfigurację 2 lub więcej default gateway w Linuksie.

Spis treści

[ukryj]

Opis problemu

W systemie Linux znajdują się 2 lub więcej kart sieciowych i każda ma własny default gateway. Standardowo w systemie możliwy jest tylko jeden default gateway, w opisanym przypadku dochodzi do asynchronicznego routingu, przy którym router nie przekazuje pakietów dalej.

Rozwiązanie

Do rozwiązania tego problemu może zostać wykorzystany program iproute2, który zawarty jest we wszystkich nowoczesnych dystrybucjach Linuksa i jest z reguły już zainstalowany. Normalnie system Linux ma tablice tras, w której może być zapisany tylko jeden default gateway. Iproute2 umożliwia założenie dodatkowych tablic i pozwala na ich wykorzystanie przez system według innych reguł.

Punkt wyjścia

Zakładamy, że posiadamy 2 Interfaces, eth0 i eth1. Obie sieci, które mają być wykorzystywane to 192.168.0.0/24 i 10.10.0.0/24, zawsze .1 ma być gateway danej sieci. W Debianie konfiguracja wyjściowa sieci wygląda następująco: /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface

Auto lo
Iface lo inet loopback

# The primary network interface

Allow-hotplug eth0
Iface eth0 inet static
    Address 192.168.0.10
    Netmask 255.255.255.0
    Gateway 192.168.0.1

# The secondary network interface
Allow-hotplug eth1
Iface eth1 inet static
    Address 10.10.0.10
    Netmask 255.255.255.0

Dodanie drugiej tablicy tras

Aby dodać drugą tablicę tras należy zedytować plik /etc/iproute2/rt_tables. W przykładzie nazwiemy tablicę tras "rt2" i nadamy referencję 1. Wspomniany plik powinien wyglądać następująco:

#
# reserved values
#
255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.Ruhep
1 rt2

Konfiguracja nowej tablicy tras

Do osiągnięcia celu brakuje teraz jedynie 4 poleceń. Jako pierwsze powinna zostać wypełniona nowa tablica, co może zostać przeprowadzone następującym poleceniem:

ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
Ip route add default via 10.10.0.1 dev eth1 table rt2

Pierwszym poleceniem ustala się, że sieć 10.10.0.0/24 dostępna jest przez interfejs eth1, drugie polecenie ustala default gateway.

Reguły routingu

Aby system wiedział, że ma wykorzystywać nowa tablicę tras muszą zostać skonfigurowane 2 reguły:

ip rule add from 10.10.0.10/32 table rt2
Ip rule add to 10.10.0.10/32 table rt2

Przez to ustalane jest, że zarówno ruch z IP 10.10.0.10 jak i ruch, który przebiega z/do IP 10.10.0.10 ma korzystać z tablicy tras rt2.

Uczynienie konfiguracji trwałą

Polecenia "ip rule" i "ip route" nie są aktualne po restarcie, dlatego powinien zostać napisany skrypt (np. /etc/rc.Local), który zostanie podczas uruchamiania wykonany. W Debianie to polecenie może zostać dodane w /etc/network/interfaces, co wygląda następująco:

iface eth1 inet static
    Address 10.10.0.10
    Netmask 255.255.255.0
    Post-up ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
    Post-up ip route add default via 10.10.0.1 dev eth1 table rt2
    Post-up ip rule add from 10.10.0.10/32 table rt2
    Post-up ip rule add to 10.10.0.10/32 table rt2

Więcej niż 2 karty sieciowe / gateway

Jeżeli jest dostępnych więcej kart sieciowych niż 2, to dla każdej następnej może zostać utworzona nowa tablica tras, analogicznie do przedstawionego przykładu.

Kontrola konfiguracji

Dla upewnienia się, że zarówno reguły jak i wpisy w tablicy są poprawnie stosowane, można wykorzystać następujące polecenie:

ip route list table rt2
Ip rule show

Linki

Linux Advanced Routing & Traffic control

Tuning wydajności MySQL

Ten artykuł opisuje różne sposoby analizy i optymalizacji wydajności serwera MySQL. Przedstawione są zarówno wskazówki z literatury jak i z różnych narzędzi.

Spis treści

[ukryj]

Teoria

Szkolenia / certyfikaty MySQL

MySQL oferuje różne szkolenia, które mogą się zakończyć egzaminem i certyfikatem.

Oferowane są między innymi następujące szkolenia:

  • MySQL for Database Administrators (CMDBA)
  • MySQL for Developers (CMDEV)
  • MySQL Cluster Database Administrator (CMCDBA)
  • MySQL Performance Tuning

Wszystkie aktualne informacje odnośnie szkoleń znajdują się na: http://www.Mysql.Com/training

Literatura

  • MySQL Performance Blog von Percona [1]
  • mySQL DBA Blog [2]
  • MySQL Community Librarian [3]
  • Książka "High Performance MySQL" autor: O'Reilly (dostępna w języku niemieckim i angielskim)
  • Artykuł Pro-Linux [4] (j. Niemiecki)

Oprogramowanie monitoringu

Przykład wykresu analizy Mysql Cacti:

Mysql-cacti-graph.Png

Narzędzia

mysqltuner.Pl

Ten skrypt Perl umożliwia szybki i prosty przegląd stanu serwera MySQL. W obszarze Recommendations wyniku skryptu zawarte są wskazówki jak dzięki łatwym ulepszeniom konfiguracji może zostać zwiększona wydajność serwera MySQL.

Skrypt może zostać uruchomiony w dwóch etapach.

Wpierw za pośrednictwem wget musi zostać pobrana aktualna wersja:

server:~# wget http://mysqltuner.Pl

Alternatywnie w Ubuntu i Debianie mysqltuner może zostać zainstalowany bezpośrednio z repozytorium:

server:~# apt-get install mysqltuner

Następnie MySQL-Tuner zostaje uruchomiony, przy czym konieczne może być podanie danych dostępowych MySQL.

Poniżej przykład wyniku z niezoptymalizowanego serwera MySQL:

server:~# perl mysqltuner.Pl 

 >>  MySQLTuner 1.0.1 - Major Hayden 
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.Com/
 >>  Run with '--help' for additional options and output filtering
Please enter your MySQL administrative login: root
Please enter your MySQL administrative password: XXXXXXXX

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.51a-24+lenny2+spu1
[OK] Operating on 32-bit architecture with less than 2GB RAM

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster 
[--] Data in MyISAM tables: 1M (Tables: 26)
[--] Data in InnoDB tables: 22M (Tables: 39)
[--] Data in MEMORY tables: 0B (Tables: 1)
[!!] Total fragmented tables: 10

-------- Performance Metrics -------------------------------------------------
[--] Up for: 11d 16h 28m 56s (8M q [8.714 qps], 597K conn, TX: 2B, RX: 1B)
[--] Reads / Writes: 93% / 7%
[--] Total buffers: 58.0M global + 2.6M per thread (100 max threads)
[OK] Maximum possible memory usage: 320.5M (15% of installed RAM)
[OK] Slow queries: 0% (0/8M)
[OK] Highest usage of available connections: 19% (19/100)
[OK] Key buffer size / total MyISAM indexes: 16.0M/1.9M
[OK] Key buffer hit rate: 99.4% (266K cached / 1K reads)
[OK] Query cache efficiency: 70.2% (4M cached / 6M selects)
[!!] Query cache prunes per day: 2132
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 586K sorts)
[!!] Temporary tables created on disk: 30% (24K on disk / 81K total)
[OK] Thread cache hit rate: 99% (1K created / 597K connections)
[!!] Table cache hit rate: 14% (64 open / 433 opened)
[OK] Open file limit used: 0% (6/1K)
[OK] Table locks acquired immediately: 100% (2M immediate / 2M locks)
[!!] InnoDB data size / buffer pool: 22.1M/8.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    Enable the slow query log to troubleshoot bad queries
    When making adjustments, make tmp_table_size/max_heap_table_size equal
    Reduce your SELECT DISTINCT queries without LIMIT clauses
    Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
    Query_cache_size (> 16M)
    Tmp_table_size (> 32M)
    Max_heap_table_size (> 16M)
    Table_cache (> 64)
    Innodb_buffer_pool_size (>= 22M)

Więcej informacji o skrypcie znajduje się na: http://mysqltuner.Com/

mysql-primer.Sh

Alternatywą z nieco bardziej szczegółowym wynikiem jest skrypt MySQL Performance Tuning Primer Script. Jest to skrypt bashowy, który w niektórych przypadkach może wymagać instalacje polecenia "bc".

Może on zostać pobrany z: http://www.Day32.Com/MySQL/tuning-primer.Sh

Przykład wyniku nadal nieoptymalizowanego serwera MySQL:

server:~# bash tuning-primer.Sh 

Using login values from ~/.My.Cnf
- INITIAL LOGIN ATTEMPT FAILED -
Testing for stored webmin passwords:
 None Found
Could not auto detect login info!
Found Sockets: /var/run/mysqld/mysqld.Sock
Using: /var/run/mysqld/mysqld.Sock
Would you like to provide a different socket?: [y/N] 
Do you have your login handy ? [y/N] : y
User: root
Password: XXXXXX
 
Would you like me to create a ~/.My.Cnf file for you? [y/N] : 
 
	-- MYSQL PERFORMANCE TUNING PRIMER --
	     - By: Matthew Montgomery -

MySQL Version 5.0.51a-24+lenny2+spu1 i486

Uptime = 11 days 16 hrs 45 min 23 sec
Avg. Qps = 8
Total Questions = 8816468
Threads Connected = 1

Server has been running for over 48hrs.
It should be safe to follow these recommendations

To find out more information on how each of these
Runtime variables effects performance visit:
http://dev.Mysql.Com/doc/refman/5.0/en/server-system-variables.Html
Visit http://www.Mysql.Com/products/enterprise/advisors.Html
For info about MySQL's Enterprise Monitoring and Advisory Service

SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 10 sec.
You have 0 out of 8816491 that take longer than 10 sec. To complete
Your long_query_time seems to be fine

BINARY UPDATE LOG
The binary update log is NOT enabled.
You will not be able to do point in time recovery
See http://dev.Mysql.Com/doc/refman/5.0/en/point-in-time-recovery.Html

WORKER THREADS
Current thread_cache_size = 8
Current threads_cached = 7
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 100
Current threads_connected = 1
Historic max_used_connections = 19
The number of used connections is 19% of the configured maximum.
Your max_connections variable seems to be fine.

INNODB STATUS
Current InnoDB index space = 3 M
Current InnoDB data space = 22 M
Current InnoDB buffer pool free = 0 %
Current innodb_buffer_pool_size = 8 M
Depending on how much space your innodb indexes take up it may be safe
To increase this value to up to 2 / 3 of total system memory

MEMORY USAGE
Max Memory Ever Allocated : 91 M
Configured Max Per-thread Buffers : 262 M
Configured Max Global Buffers : 42 M
Configured Max Memory Limit : 304 M
Physical Memory : 2.00 G
Max memory limit seem to be within acceptable norms

KEY BUFFER
Current MyISAM index space = 1 M
Current key_buffer_size = 16 M
Key cache miss rate is 1 : 163
Key buffer free ratio = 88 %
Your key_buffer_size seems to be fine

QUERY CACHE
Query cache is enabled
Current query_cache_size = 16 M
Current query_cache_used = 6 M
Current query_cache_limit = 1 M
Current Query cache Memory fill ratio = 38.54 %
Current query_cache_min_res_unit = 4 K
MySQL won't cache query results that are larger than query_cache_limit in size

SORT OPERATIONS
Current sort_buffer_size = 2 M
Current read_rnd_buffer_size = 256 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 132.00 K
You have had 191 queries where a join could not use an index properly
You should enable "log-queries-not-using-indexes"
Then look for non indexed joins in the slow query log.
If you are unable to optimize your queries you may want to increase your
Join_buffer_size to accommodate larger joins in one pass.

Note! This script will still suggest raising the join_buffer_size when
ANY joins not using indexes are found.

OPEN FILES LIMIT
Current open_files_limit = 1024 files
The open_files_limit should typically be set to at least 2x-3x
That of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine

TABLE CACHE
Current table_cache value = 64 tables
You have a total of 83 tables
You have 64 open tables.
Current table_cache hit rate is 4%
, while 100% of your table cache is in use
You should probably increase your table_cache

TEMP TABLES
Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Of 56876 temp tables, 30% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Perhaps you should increase your tmp_table_size and/or max_heap_table_size
To reduce the number of disk-based temporary tables
Note! BLOB and TEXT columns are not allow in memory tables.
If you are using these columns raising these values might not impact your 
Ratio of on disk temp tables.

TABLE SCANS
Current read_buffer_size = 128 K
Current table scan ratio = 3 : 1
Read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 0 : 8816798
Your table locking seems to be fine

Dalsze informacje znajdują się na: http://www.Day32.Com/MySQL/

Synchronizacja danych w Linuksie przy pomocy rsync

Program rsync[1] umożliwia w Linuksie jednokierunkową synchronizację danych katalogu źródła z katalogiem docelowym. Oba katalogi mogą się znajdować w różnych komputerach (synchronizacja odbywa się przez sieć).

Spis treści

[ukryj]

Przykład: Synchronizacja danych w celu backupu

Często program rsync wykorzystywany jest do backupu. Za pośrednictwem następującego, przykładowego polecenia katalog /home/ serwera server.Example.Com zostaje zsynchronizowany z katalogiem /mnt/server-mirror/home/ lokalnej maszyny. Transfer danych odbywa się przez SSH:

rsync -av --delete -e ssh [email protected]:/home/ /mnt/server-mirror/home/

Jeżeli rsync ma być wykorzystywany w skrypcie to uwierzytelnienie może zostać przeprowadzone przez klucz SSH:

rsync -av --delete -e "ssh -i /home/user/.Ssh/sshkey" [email protected]:/home/ /mnt/server-mirror/home/

Wskazane opcje rsync mają następujące znaczenie:

  • -a (skrót dla --archive): takie samo znaczenie jak -rlptgoD
    • -r (skrót dla --recursive): kopiowanie podkatalogów
    • -l (skrót dla --links): kopiowanie symbolicznych linków
    • -p (skrót dla --perms): zachowanie uprawnień pliku źródłowego
    • -t (skrót dla --times): zachowanie czasów pliku źródłowego
    • -g (skrót dla --group): zachowanie uprawnień grupowych pliku źródłowego
    • -o (skrót dla --owner): zachowanie prawa własności do pliku źródłowego (możliwe jedynie jako root)
    • -D (skrót dla --devices --specials): zachowanie plików urządzenia pliku źródłowego (możliwe jedynie jako root)
  • -v (skrót dla --verbose): pokazuje podczas wykonywania, które pliki są synchronizowane
  • --delete: usuwa pliki w katalogu docelowym, które w międzyczasie nie są już obecne w katalogu źródłowym

Wersja backupu z rdiff-backup

W przypadku gdy w katalogu źródłowym pomyłkowo zostanie usunięty jeden plik i następnie przeprowadzony rsync to ten plik jest oczywiście również nieobecny w katalogu docelowym. W takich przypadkach optymalnym uzupełnieniem rsync jest rdiff-backup.

Odnośniki

  1. ↑ http://www.Samba.Org/rsync/

Rejestracja i analiza wydajności w Linuksie programem sar

sar służy do zapisu i analizy różnych informacji dotyczących procesów zachodzących w systemie. W przypadku problemów z wydajnością sar umożliwia również wsteczną analizę obciążeń poszczególnych podsystemów (CPU, pamięć RAM, pamięć dyskowa, przerwania, interfejsy sieciowe, ...), w celu wyizolowania problemu.

Spis treści

[ukryj]

Struktura

sar jest częścią sysstat[1]. Sam sar składa się z następujących części:

  • sar(1) - wyświetla zapisane dane.
  • sadc(8) - system activity data collector, zapisuje w formacie binarnym dane o procesach systemowych.
  • sa1(8) - skrypt BASH, wykorzystuje w tle sadc, uruchamiany jest przez Cron co 10 minut (/etc/cron.D/sysstat).
  • sa2(8) - skrypt BASH, wykorzystywany jest do zapisu dziennego raportu, uruchamiany jest przez Cron każdego dnia (/etc/cron.D/sysstat).
  • sadf(1) - wyświetla zapisane dane, w przeciwieństwie do sar oferuje różne formaty (CSV, XML, itd.).

Wersje

Pakiet sysstat (das u.A. Sar enthält) jest nadal rozwijany. Numeracja wersji przeprowadzana jest według następującego schematu:[2]:

  • numer wersji x.0 wskazuje zawsze wersję stabilną
  • numer wersji x.1 wskazuje zawsze wersje testowe i rozwojowe

Nowe wersje oferują zazwyczaj nowe opcje. W wersji 7.1.6 funkcje sar -x i sar -X zostały wyeksportowane do (pidstat)[3].

Instalacja

Jak zostało już wspomniane sar jest częścią pakietu sysstat, który standardowo zawarty jest w wielu dystrybucjach lub może odpowiednio do dystrybucji zostać doinstalowany przez yum install sysstat lub apt-get install sysstat. Przy czym również często zostają dodane Cronjobs w /etc/cron.D/sysstat.

Sposób funkcjonowania zapisu

sa1 i sa2 zapisuje pozyskane dane w katalogu /var/log/sa/ (RHEL/CentOS) lub /var/log/sysstat/ (Debian). Dane przechowywane są w konfiguracji standardowej przez tydzień, okres ten może zostać wydłużony do maks. 28 dni (w /etc/sysconfig/sysstat - RHEL/CentOS lub /etc/sysstat/config - Debian 4.0 i /etc/sysstat/sysstat - Debian 5.0).

Aktywacja zapisu sar w Debianie: aby aktywować automatyczny zapis w Debianie należy zmienić w pliku /etc/default/sysstat wartość parametru "ENABLED" na "true" - standardowo jest "false".

Przykład:

[root@testserver ~]# cat /etc/sysconfig/sysstat
# How long to keep log files (days), maximum is a month
HISTORY=7
[root@testserver ~]# cat /etc/cron.D/sysstat 
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

[root@testserver ~]# ls -l /var/log/sa/
Total 8952
-rw-r--r--  1 root root 410352 May 18 23:50 sa18
-rw-r--r--  1 root root 410352 May 19 23:50 sa19
-rw-r--r--  1 root root 410352 May 20 23:50 sa20
-rw-r--r--  1 root root 410352 May 21 23:50 sa21
-rw-r--r--  1 root root 410352 May 22 23:50 sa22
-rw-r--r--  1 root root 410352 May 23 23:50 sa23
-rw-r--r--  1 root root 410352 May 24 23:50 sa24
-rw-r--r--  1 root root 410352 May 25 23:50 sa25
-rw-r--r--  1 root root 253712 May 26 14:40 sa26
-rw-r--r--  1 root root 611085 May 17 23:53 sar17
-rw-r--r--  1 root root 611129 May 18 23:53 sar18
-rw-r--r--  1 root root 611127 May 19 23:53 sar19
-rw-r--r--  1 root root 611127 May 20 23:53 sar20
-rw-r--r--  1 root root 611085 May 21 23:53 sar21
-rw-r--r--  1 root root 611100 May 22 23:53 sar22
-rw-r--r--  1 root root 611085 May 23 23:53 sar23
-rw-r--r--  1 root root 611085 May 24 23:53 sar24
-rw-r--r--  1 root root 611125 May 25 23:53 sar25
[root@testserver ~]#

Wyświetlenie zapisanych przez sar danych

Ograniczenie okresu

sar może wyświetlić dane z aktualnego dnia (do czego nie jest wymagany parametr) lub dane z określonego dnia (np. Z parametrem -f /var/log/sa/sa21).

Może również zostać podany okres za pośrednictwem następującego parametru:

  • -s [ hh:mm:ss ] - czas rozpoczęcia punkt wyjściowy (np. -s 07:30:00), bez podania konkretnego czasu zostaje jako standardowo zastosowane 08:00:00.
  • -e [ hh:mm:ss ] - czas końcowy (np. -e 19:30:00), bez podania konkretnego czasu zostaje jako standardowo zastosowane 18:00:00.

Parametry dla różnych podsystemów

Tu pokazane są przykłady wyświetlenia różnych wartości (wartości pochodzą z systemu CentOS 4.7, sysstat wersja 5.0.5).

Obciążenia procesora: sar -P ALL

Tu wyświetlone są wartości wszystkich procesorów (-P ALL) z 25. Bieżącego miesiąca (-f /var/log/sa/sa25).

[root@testserver ~]# sar -P ALL -f /var/log/sa/sa25
Linux 2.6.9-023stab048.6-smp (testserver.Thomas-krenn.Com) 	05/25/09

00:00:01          CPU     %user     %nice   %system   %iowait     %idle
00:10:01          all      9.63      0.00      3.81      6.20     80.36
00:10:01            0      8.69      0.00      3.63      7.18     80.50
00:10:01            1      9.28      0.00      3.96      4.47     82.29
00:10:01            2     10.22      0.00      3.86      6.31     79.62
00:10:01            3      9.84      0.00      3.66      6.91     79.59
00:10:01            4      9.86      0.00      3.94      5.28     80.92
00:10:01            5      9.97      0.00      3.84      6.37     79.81
00:10:01            6      9.90      0.00      4.04      7.21     78.85
00:10:01            7      9.32      0.00      3.54      5.83     81.32
[...]
Average:          all      9.21      0.00      1.68      0.27     88.84
Average:            0      9.03      0.00      1.70      0.31     88.97
Average:            1      9.20      0.00      1.67      0.25     88.88
Average:            2      9.45      0.00      1.70      0.28     88.56
Average:            3      9.84      0.00      1.68      0.26     88.22
Average:            4      9.23      0.00      1.68      0.26     88.84
Average:            5      9.05      0.00      1.68      0.27     89.00
Average:            6      8.90      0.00      1.68      0.29     89.14
Average:            7      8.97      0.00      1.66      0.28     89.10
[root@testserver ~]#

Obciążenie pamięci RAM: sar -r

Tu wyświetlone są wartości pamięci RAM (-r) aktualnego dnia. Wartość bliska 100 dla %memused jest przy tym pozytywna (tak długo jak nie jest konieczna pamięć SWAP). Vide Ustawienia pamięci podręcznej kontrolera RAID i dysków twardych.

[root@testserver ~]# sar -r
Linux 2.6.9-023stab048.6-smp (testserver.Thomas-krenn.Com)   05/26/09

00:00:01    kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
00:10:01        67248  16292680     99.59     42320  12502420   2047648       628      0.03         0
00:20:01       129776  16230152     99.21     47020  12527100   2047648       628      0.03         0
[...]
14:50:01       638680  15721248     96.10    158392   6953128   2047648       628      0.03         0
15:00:01       646272  15713656     96.05    159880   6966980   2047648       628      0.03         0
15:10:01        59784  16300144     99.63    132044   6565036   2047648       628      0.03         0
Average:       554290  15805638     96.61    124889  10992802   2047648       628      0.03         0
[root@testserver ~]# 

Średnie obciążenie: sar -q

Tu wyświetlone są wartości średniego obciążenia (-q) aktualnego dnia.

[root@testserver ~]# sar -q 
Linux 2.6.9-023stab048.6-smp (testserver.Thomas-krenn.Com) 	05/26/09

00:00:01      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
00:10:01            0       590      1.62      1.89      1.21
00:20:01           11       574      0.24      0.63      0.86
[...]
15:10:01            7       671      2.36      2.26      2.03
15:20:01            9       651      1.85      1.96      1.99
Average:            7       600      1.02      1.04      1.00
[root@testserver ~]# 

Przepustowość I/O: sar -b

Tu wyświetlane są wartości szybkości transferu I/O (-b) aktualnego dnia.

[root@testserver ~]# sar -b
Linux 2.6.9-023stab048.6-smp (testserver.Thomas-krenn.Com) 	05/26/09

00:00:01          tps      rtps      wtps   bread/s   bwrtn/s
00:10:01       402.21    197.20    205.00  35133.80  27616.04
00:20:01        66.61     56.36     10.24   2034.96    288.93
[...]
15:20:01        72.43      6.54     65.89    176.29   2720.35
15:30:01        73.28      6.08     67.20    399.04   3516.21
Average:        40.21      5.57     34.64    585.00   1561.78
[root@testserver ~]# 

Network statistic: sar -n DEV

Tu wyświetlane są wartości network statistic (-n DEV) aktualnego dnia.

[root@testserver ~]# sar -n DEV
Linux 2.6.9-023stab048.6-smp (testserver.Thomas-krenn.Com) 	05/26/09

00:00:01        IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
00:10:01           lo      0.82      0.82    177.69    177.69      0.00      0.00      0.00
00:10:01         eth0     31.56     40.21   4537.41  35891.07      0.00      0.00      0.00
00:10:01         eth1   4876.29   9919.22 451754.61 14927283.09      0.00      0.00      0.00
00:10:01       venet0     52.88     44.19  46547.68  15279.15      0.00      0.00      0.00
[...]
15:30:01           lo      0.82      0.82    176.68    176.68      0.00      0.00      0.00
15:30:01         eth0    113.08    155.70  17825.90 188643.77      0.00      0.00      0.00
15:30:01         eth1    634.80   1268.92  58495.76 1888004.02      0.00      0.00      0.00
15:30:01       venet0    189.86    147.08 213164.21  42532.10      0.00      0.00      0.00
Average:           lo      0.82      0.82    177.10    177.10      0.00      0.00      0.00
Average:         eth0     56.42     78.90   9104.66  94428.28      0.00      0.00      0.00
Average:         eth1    281.59    559.55  25919.74 830592.96      0.00      0.00      0.00
Average:       venet0     87.26     64.75  99974.13  14933.05      0.00      0.00      0.00
[root@testserver ~]# 

Wszystkie zgromadzone wartości

Dzięki sar -A mogą zostać pokazane wszystkie zgromadzone wartości (CPU, RAM, itd.).

Narzędzia do analizy graficznej

Następujące narzędzia przedstawiają graficznie zapisane przez sar dane::

Przekierowanie sdtout i stderr w bashu

Artykuł ten opisuje w jaki sposób można pod Linuksem przekierować w bashu sdtout i stderr. Mowa jest przy tym o Bash redirection.

Spis treści

[ukryj]

Bash redirection

stdout -> przekierować do pliku

programm > plik.Txt

stderr -> przekierować do pliku

programm 2> plik.Txt

stdout i stderr -> przekierować do pliku

program &> plik.Txt

stdout -> stderr

program 1>&2

stderr -> stdout

program 2>&1

Dalsze informacje

Analiza twardego dysku z smartctl

Za pośrednictwem smartctl mogą w Linuksie zostać odczytane wartości SMART dysku twardego. W tym przykładzie pokazujemy analizę uszkodzonego dysku, który nie może odczytać większej ilości sektorów. Przez co musi zostać on wymieniony.

Spis treści

[ukryj]

Wyświetlenie informacji SMART

smartctl -a /dev/DEVICENAME pokazuje wszystkie informacje SMART danego HDD. Dysk z tego przykładu wykazuje przy kilku atrybutach SMART podwyższone wartości:

root@ubuntu-10-10:~# smartctl -a /dev/sdb
Smartctl 5.40 2010-03-16 r3077 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.Sourceforge.Net

=== START OF INFORMATION SECTION ===
Model Family:     SAMSUNG SpinPoint F2 EG series
Device Model:     SAMSUNG HD502HI
Serial Number:    S1VZJ9CS712490
Firmware Version: 1AG01118
User Capacity:    500,107,862,016 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 3b
Local Time is:    Wed Feb  9 15:30:42 2011 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00)    Offline data collection activity
                    Was never started.
                    Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0)    The previous self-test routine completed
                    Without error or no self-test has ever 
                    Been run.
Total time to complete Offline 
Data collection:          (6312) seconds.
Offline data collection
Capabilities:              (0x7b) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    Command.
                    Offline surface scan supported.
                    Self-test supported.
                    Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003)    Saves SMART data before entering
                    Power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01)    Error logging supported.
                    General Purpose Logging supported.
Short self-test routine 
Recommended polling time:      (   2) minutes.
Extended self-test routine
Recommended polling time:      ( 106) minutes.
Conveyance self-test routine
Recommended polling time:      (  12) minutes.
SCT capabilities:            (0x003f)    SCT Status supported.
                    SCT Error Recovery Control supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   099   099   051    Pre-fail  Always       -       2376
  3 Spin_Up_Time            0x0007   091   091   011    Pre-fail  Always       -       3620
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       405
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   253   253   051    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0025   100   100   015    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       717
 10 Spin_Retry_Count        0x0033   100   100   051    Pre-fail  Always       -       0
 11 Calibration_Retry_Count 0x0012   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       405
 13 Read_Soft_Error_Rate    0x000e   099   099   000    Old_age   Always       -       2375
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0033   100   100   000    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       2375
188 Command_Timeout         0x0032   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   084   074   000    Old_age   Always       -       16 (Lifetime Min/Max 16/16)
194 Temperature_Celsius     0x0022   084   071   000    Old_age   Always       -       16 (Lifetime Min/Max 16/16)
195 Hardware_ECC_Recovered  0x001a   100   100   000    Old_age   Always       -       3558
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0012   098   098   000    Old_age   Always       -       81
198 Offline_Uncorrectable   0x0030   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   100   100   000    Old_age   Always       -       1
200 Multi_Zone_Error_Rate   0x000a   100   100   000    Old_age   Always       -       0
201 Soft_Read_Error_Rate    0x000a   253   253   000    Old_age   Always       -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]


SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

Root@ubuntu-10-10:~#

Analiza

Dla szczegółowej analizy interesujące są w tym przykładnie niestepujące wartości:

  1 Raw_Read_Error_Rate     0x000f   099   099   051    Pre-fail  Always       -       2376
 13 Read_Soft_Error_Rate    0x000e   099   099   000    Old_age   Always       -       2375
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       2375
195 Hardware_ECC_Recovered  0x001a   100   100   000    Old_age   Always       -       3558
197 Current_Pending_Sector  0x0012   098   098   000    Old_age   Always       -       81
199 UDMA_CRC_Error_Count    0x003e   100   100   000    Old_age   Always       -       1

Wartość RAW_VALUE z Current_Pending_Sector podaje ile sektorów nie może zostać odczytanych na HDD i czeka na remapping.[1] Szczegółowe informacje o innych wartościach S.M.A.R.T. Znajdują się w dziale ATA S.M.A.R.T. Attributes artykułu z Wikipedi o SMART.[2]

Testy SMART

SMART wspiera kilka testów dysku twardego. Szczegółowe informacje na ten temat znajdują się w Manpage oprogramowania smartctl.

short Test

W przykładzie rozpoczynamy short test:

root@ubuntu-10-10:~# smartctl -t short /dev/sdb
Smartctl 5.40 2010-03-16 r3077 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.Sourceforge.Net

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Wed Feb  9 15:35:31 2011

Use smartctl -X to abort test.
Root@ubuntu-10-10:~#

Wyniki testu

Z smartctl -l selftest /dev/sdb wyświetlane są wyniki testów. W przykładzie widoczny jest adres LBA pierwszego błędnego sektora.

root@ubuntu-10-10:~# smartctl -l selftest /dev/sdb
Smartctl 5.40 2010-03-16 r3077 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.Sourceforge.Net

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       20%       717         555027747

Root@ubuntu-10-10:~#

Remapping błędnego sektora

Jeżeli na takim błędnym sektorze ma być przeprowadzony zapis to dysk spróbuje wspomniany sektor przenieść (remappen). Szczegółowe informacje na ten temat znajdują się w Bad block HOWTO.[3]

Następujące komendy pokazują remapping sektora, wartość Current_Pending_Sector maleje (procedura została przeprowadzona zgodnie z Bad Block HOWTO):

root@ubuntu-10-10:~# fdisk -lu /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x20d1585d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      206847      102400    7  HPFS/NTFS
Partition 1 does not end on cylinder boundary.
/dev/sdb2          206848    97863097    48828125    7  HPFS/NTFS
/dev/sdb3        97868041   976768064   439450012    5  Extended
/dev/sdb5        97868043   964703249   433417603+  83  Linux
/dev/sdb6       964703313   976768064     6032376   82  Linux swap / Solaris
Root@ubuntu-10-10:~# tune2fs -l /dev/sdb5 | grep Block
Block count:              108354400
Block size:               4096
Blocks per group:         32768
Root@ubuntu-10-10:~# debugfs 
Debugfs 1.41.12 (17-May-2010)
Debugfs:  open /dev/sdb5
Debugfs:  testb 57144963
Block 57144963 not in use
Debugfs:  quit
Root@ubuntu-10-10:~# dd if=/dev/zero of=/dev/sdb5 bs=4096 count=1 seek=57144963
1+0 records in
1+0 records out
4096 bytes (4,1 kB) copied, 0,000379164 s, 10,8 MB/s
Root@ubuntu-10-10:~# sync
Root@ubuntu-10-10:~# smartctl -A /dev/sdb
Smartctl 5.40 2010-03-16 r3077 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.Sourceforge.Net

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
[...]
197 Current_Pending_Sector  0x0012   098   098   000    Old_age   Always       -       80
[...]

Rozpoczęty zostaje kolejny test i również zostaje przeprowadzony remapping:

root@ubuntu-10-10:~# smartctl -t short /dev/sdb
Smartctl 5.40 2010-03-16 r3077 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.Sourceforge.Net

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Wed Feb  9 15:47:41 2011

Use smartctl -X to abort test.
Root@ubuntu-10-10:~# smartctl -l selftest /dev/sdb
Smartctl 5.40 2010-03-16 r3077 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.Sourceforge.Net

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       20%       717         555027784
# 2  Short offline       Completed: read failure       20%       717         555027747

Root@ubuntu-10-10:~# debugfs 
Debugfs 1.41.12 (17-May-2010)
Debugfs:  open /dev/sdb5
Debugfs:  testb 57144967
Block 57144967 not in use
Debugfs:  quit
Root@ubuntu-10-10:~# dd if=/dev/zero of=/dev/sdb5 bs=4096 count=1 seek=57144967
1+0 records in
1+0 records out
4096 bytes (4,1 kB) copied, 0,000374713 s, 10,9 MB/s
Root@ubuntu-10-10:~# smartctl -A /dev/sdb
Smartctl 5.40 2010-03-16 r3077 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.Sourceforge.Net

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
[...]
197 Current_Pending_Sector  0x0012   098   098   000    Old_age   Always       -       79
[...]

Odnośniki

  1. ↑ 9133: S.M.A.R.T. Attribute: Current Pending Sector Count (Acronis Knowledge Base)
  2. ↑ S.M.A.R.T. (en.Wikipedia.Org)
  3. ↑ Bad block HOWTO for smartmontools

Montowanie w Linuksie zasobów udostępnionych w systemie Windows

Systemy Linux pozwalają na dostęp do plików udostępnionych w systemie Windows (Samba). Wykorzystywany do tego jest cifs (wcześniej smbfs).

Spis treści

[ukryj]
1 Montowanie zasobów z cifs 2 smbfs 3 Odnośniki 4 Dalsze informacje

Montowanie zasobów z cifs

Zasoby udostępnione w systemie Windows mogą zostać zamontowane z wiersza poleceń systemu Linux w poniżej pokazany sposób. W tym przykładzie wykorzystane są następujące wartości:

  • adres IP serwera: 192.168.1.100
  • nazwa udostępnienia: freigabe
  • nazwa użytkownika: testuser
admin@adminpc-ubuntu:~$ sudo mount -t cifs //192.168.1.100/freigabe /mnt -o user=testuser
Password:

smbfs

System plików "smbfs" nie powinien być dzisiaj wykorzystywany. VFS "smbfs" nie jest już wspierany. [1] Pomimo tego znajdują się tutaj informacje na jego temat:

Próba skorzystania z smbfs kończy się niepowodzeniem z następującym komunikatem:

admin@adminpc-ubuntu:~$ sudo mount -t smbfs //192.168.1.100/freigabe /mnt -o username=testuser
Mount: wrong fs type, bad option, bad superblock on //192.168.1.100/operating-systems,
       Missing codepage or helper program, or other error
       (for several filesystems (e.G. Nfs, cifs) you might
       Need a /sbin/mount. Helper program)
       In some cases useful info is found in syslog - try
       Dmesg | tail  or so

Admin@adminpc-ubuntu:~$

Wynik polecenia dmesg pokazuje w tym przypadku:

[18427.113492] smbfs is deprecated and will be removed from the 2.6.27 kernel. Please migrate to cifs
[18427.113499] smb_fill_super: missing data argument
[18539.255884] smbfs is deprecated and will be removed from the 2.6.27 kernel. Please migrate to cifs
[18539.255891] smbfs: mount_data version 1919251317 is not supported

Od Ubuntu 12.10 (Quantal) pakiet smbfs nie jest już zawarty w repozytorium.

Odnośniki

  1. ↑ SambaClientGuide (help.Ubuntu.Com)

Dalsze informacje

Podstawowe informacje o VLAN

Wirtualna sieć lokalna - VLAN (Virtual Local Area Network) dzieli jedną fizyczną sieć w kilka logicznych. Każdy VLAN tworzy oddzielną domenę "Broadcast". Komunikacja pomiędzy dwoma sieciami wirtualnymi możliwa jest tylko poprzez jeden router z którym połączone są VLAN-y. Sieci wirtualne zachowują się tak, jakby zostały skonfigurowane przy pomocy dedykowanych, osobnych switchy. Konkretny przykład jak mogą zostać skonfigurowane VLAN-y jest opisane w artykuleKonfiguracja VLAN Intel Modular Server.

Spis treści

[ukryj]

Typy VLAN

Sieci VLAN mogą zostać podzielone na dwa główne typy:

  • wykorzystujące separację grup portów (bez znakowania)
  • Tagged VLANs (zastosowanie znakowania ramek)

Sieci wirtualne wykorzystujące separację grup portów

VLAN-y wykorzystujące separację grup portów dzielą po prostu jeden fizyczny switch w kilka logicznych. W następującym przykładzie dzielimy 8-portowy switch (Switch A) w 2 logiczne:

8-portowy switch z 2 VLAN-ami

Switch Aport switcha VLAN ID podłączone urządzenie1 1

(zielony)

PC A-12 PC A-23 (nieużywany)4 (nieużywany)5 2

(pomarańczowy)

PC A-56 PC A-67 (nieużywany)8 (nieużywany)

Pomimo, że wszystkie komputery są podłączone do jednego fizycznego switcha to z powodu konfiguracji VLAN mogą one komunikować się jedynie w następujący sposób:

  • PC A-1 z PC A-2
  • PC A-5 z PC A-6

Przyjmijmy, że w sąsiednim pomieszczeniu znajdują sie również 4 komputery. Komputery PC B-1 i PC B-2 mają mieć możliwość komunikacji z PC A-1 und PC A-2 z pierwszego pomieszczenia. Możliwa ma być również komunikacja komputerów PC B-5 i PC B-6 z pomieszczenia 2 z komputerami PC A-5 i PC A-6 z pomieszczenia 1.

W pomieszczeniu 2 znajduje się również switch:

Switch Bport switcha VLAN ID podłączone urządzenie1 1

(zielony)

PC B-12 PC B-23 (nieużywany)4 (nieużywany)5 2

(pomarańczowy)

PC B-56 PC B-67 (nieużywany)8 (nieużywany)

Aby VLAN-y mogły zostać ze sobą połączone konieczne są tu dwa kable:

  • od switcha A port 4 do switcha B port 4 (VLAN 1)
  • od switcha A port 8 do switcha B port 8 (VLAN 2)

Połączenie 2 VLAN-ów obu fizycznych switchy przez jeden kabel. Wykorzystując separację grup portów do połączenia konieczne są dwa kable.


Tagged VLANs

Dzięki tagged VLANs komunikacja wielu VLAN-ów może przebiegać przez jeden switch, jeden port. Każda pojedyncza ramka (frames) otrzymuje Tag (tagowanie), który określa przynależność ramki do VLAN-u. Gdy w przedstawionym przykładzie oba switche wspierają tagowanie to do podłączenia konieczny jest jedynie jeden kabel.

Połączenie 2 VLAN-ów obu fizycznych switchy przez jeden kabel. Na tym kablu (Trunk) stosowane jest tagowanie (IEEE 802.1q).


Dalsze informacje

Ogólne informacje (j. Niemiecki)

Informacje specyficzne dla VMware

Informacje specyficzne dla Linuksa

BridgingNetworkInterfaces


Style Cleanup Required: This article does not follow the style standards in the Wiki Guide. More info...

Installing bridge utilities

You will need the bridge utilities for that, which all you need to do is install the bridge-utils package.

 apt-get install bridge-utils 

Setting up bridge utilities

With no further ado, this is my /etc/network/interfaces file:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
Auto lo
Iface lo inet loopback
Address 127.0.0.1
Netmask 255.0.0.0


# This is a list of hotpluggable network interfaces.
# They will be activated automatically by the hotplug subsystem.
Auto eth0
Auto ath0
Auto br0


# The internet network interface
Iface eth0 inet dhcp


# The wireless side of the bridge
Iface ath0 inet manual
  Wireless-essid MY_ESSID
  Wireless-key **********
  Wireless-mode master

# The local network bridge
Iface br0 inet static
  Bridge_ports ath0 eth1
  Address 192.168.0.2
  Netmask 255.255.255.0

The explanation is as simple as this file: the system is going to start eth0 (the internet side network interface), ath0 (the wireless network interface) and br0 (the bridge). Ath0 being 'manual' and not 'static' or 'dhcp', no IP will be assigned to it, but I need the 'auto' to set the wireless parameters. Eth1 is set up automatically as part of the bridge setup.

Note: the bridge takes time to come up. Be patient!

Before you start complaining, you should know that in fact, this does not work for me. For some reason, the atheros wireless interface goes back down in the process. I tried very hard to find a way to bring it back up, and the only one I could rely on was to add this in /etc/rc.Local, just before the line containing 'exit 0':

ip link set dev ath0 up

This is an ugly hack, but at least it does bring ath0 up...

Note for Edgy users: the madwifi driver does not support setting the mode this way, and even using the required tool did not provide me a working access point.

UPDATE [27/05/2011] - by RoastingHosting. Aside from the above 'ugly hack' (which works fine). It is also possible to bring the interface up with no IP from the /etc/network/interfaces file - this is very handy for building virtual platforms where you simply want to connect a NIC to a physical port on a VLAN but assign no IP. The following worked for me on Ubuntu 10.04LTS

#########
# Start #
#########
Auto eth1
Iface eth1 inet manual
Up ip link set eth1 up

Auto br1
Iface br1 inet manual
        Bridge_ports eth1
        Bridge_fd 0
        Bridge_hello 2
        Bridge_maxage 12
        Bridge_stp off
#######
# End #
#######

The trick is setting both the physical NIC and the bridge to 'manual' mode then using the 'up ip link set ethX up' parameter. I hope this saves someone else some time!

Additional Resources

I struggled to find the right information, so I think this might be useful! If you want to write to me directly, my e-mail is on my wiki page atHervéFache.

Also, consider this article: http://www.Linux.Com/article.Pl?Sid=06/07/10/1729226 on the same subject.

Router/Madwifi


This guide is only applicable for server installations of Ubuntu. If you are running adesktop installation of Ubuntu, try WifiDocs/Driver/Madwifi and the MadWifi wikifor more information.

1. Checking For Atheros Chipsets

First, verify that your wireless network adapter requires the madwifi device drivers.

Issue the following command:

sudo lspci | grep Atheros

If there is any output similar to that below, you should definitely install madwifi.

00:0e.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)

If there is no output, try looking through http://madwifi.Org/wiki/Compatibility to see if your network adapter is supported.

2. Installation

2.0.1. Ubuntu 8.04

The drivers are in the restricted modules package; also see the madwifi-tools package.

sudo apt-get install linux-restricted-modules madwifi-tools 

2.0.2. Ubuntu 7.10

Navigate to http://madwifi.Org/ and download and extract the latest version of the madwifi drivers (0.9.4 at the time of this writing)

wget http://internap.Dl.Sourceforge.Net/sourceforge/madwifi/madwifi-0.9.4.Tar.Gz
Tar -xvzf madwifi-0.9.4.Tar.Gz
Cd madwifi-0.9.4

Download the necessary tools, compile and install the module

sudo apt-get install build-essential linux-headers-server
Make
Sudo make install

2.1. Setting Master Mode

  • NOTE: If you are plan on using this wireless network adapter in "master" mode (i. E. For the purposes of setting up a wireless router), create the file /etc/modprobe.D/madwifi and add the following to it:

    • options ath_pci autocreate=ap
    This will tell madwifi to set your wireless device (ath0) to master mode.

Finally, load the module

sudo modprobe ath_pci

3. Sources

  1. MadWifi 'First Time User' HOWTO

  2. MadWifi Ubuntu Notes

  3. VAP Autocreation Upon modprobe ath_pci

Router/Firewall


Basic

Install the Uncomplicated Firewall, package name is ufw. Uncomplicated firewall just sets up iptables using a simple syntax, or an extended syntax based on OpenBSD's PF. To use ufw for routing, you must know iptables and should edit the files in /etc/ufw/*.Rules.

Advanced

The following is a specific example of a firewall script using only iptables.

# External (Internet-facing) interface
EXTIF="eth0"

# External IP address (automatically detected)
EXTIP=$(/sbin/ip addr show dev "$EXTIF" | perl -lne 'if(/inet (\S+)/){print$1;last}');
 
# Internal interface
INTIF="br0"

# Internal IP address (in CIDR notation)
INTIP="192.168.0.1/32"

# Internal network address (in CIDR notation)
INTNET="192.168.0.0/24"

# The address of anything/everything (in CIDR notation)
UNIVERSE="0.0.0.0/0"


Echo "External: [Interface=$EXTIF] [IP=$EXTIP]"
Echo "Internal: [Interface=$INTIF] [IP=$INTIP] [Network:$INTNET]"

Echo
Echo -n "Loading rules..."

# Enabling IP forwarding
Echo 1 > /proc/sys/net/ipv4/ip_forward


/sbin/iptables-restore <-eof;>
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

###################################################
# INPUT: Incoming traffic from various interfaces #
###################################################

# Loopback interface is valid
-A INPUT -i lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT


# Local interface, local machines, going anywhere is valid
-A INPUT -i $INTIF -s $INTNET -d $UNIVERSE -j ACCEPT


# Remote interface, claiming to be local machines, IP spoofing, get lost
-A INPUT -i $EXTIF -s $INTNET -d $UNIVERSE -j REJECT


# External interface, from any source, for ICMP traffic is valid
-A INPUT -i $EXTIF -p ICMP -s $UNIVERSE -d $EXTIP -j ACCEPT


# Allow any related traffic coming back to the MASQ server in.
-A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


# Internal interface, DHCP traffic accepted
-A INPUT -i $INTIF -p tcp --sport 68 --dport 67 -j ACCEPT
-A INPUT -i $INTIF -p udp --sport 68 --dport 67 -j ACCEPT


# External interface, HTTP/HTTPS traffic allowed
-A INPUT -i $EXTIF -m conntrack --ctstate NEW,ESTABLISHED,RELATED -p tcp -s $UNIVERSE -d $EXTIP --dport 80 -j ACCEPT
-A INPUT -i $EXTIF -m conntrack --ctstate NEW,ESTABLISHED,RELATED -p tcp -s $UNIVERSE -d $EXTIP --dport 443 -j ACCEPT

# External interface, SSH traffic allowed
-A INPUT -i $EXTIF -m conntrack --ctstate NEW,ESTABLISHED,RELATED -p tcp -s $UNIVERSE -d $EXTIP --dport 22 -j ACCEPT

# Accept port 1234 to be forwarded (this rule needs to correspond with PREROUTING rules in NAT table)
#-A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 1234 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

# Catch-all rule, reject anything else
-A INPUT -s $UNIVERSE -d $UNIVERSE -j REJECT


####################################################
# OUTPUT: Outgoing traffic from various interfaces #
####################################################

# Workaround bug in netfilter
-A OUTPUT -m conntrack -p icmp --ctstate INVALID -j DROP

# Loopback interface is valid.
-A OUTPUT -o lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT


# Local interfaces, any source going to local net is valid
-A OUTPUT -o $INTIF -s $EXTIP -d $INTNET -j ACCEPT


# local interface, MASQ server source going to the local net is valid
-A OUTPUT -o $INTIF -s $INTIP -d $INTNET -j ACCEPT


# outgoing to local net on remote interface, stuffed routing, deny
-A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j REJECT


# anything else outgoing on remote interface is valid
-A OUTPUT -o $EXTIF -s $EXTIP -d $UNIVERSE -j ACCEPT


# Internal interface, DHCP traffic accepted
-A OUTPUT -o $INTIF -p tcp -s $INTIP --sport 67 -d 255.255.255.255 --dport 68 -j ACCEPT
-A OUTPUT -o $INTIF -p udp -s $INTIP --sport 67 -d 255.255.255.255 --dport 68 -j ACCEPT


# Catch all rule, all other outgoing is denied and logged. 
-A OUTPUT -s $UNIVERSE -d $UNIVERSE -j REJECT

# Accept solicited tcp packets
-A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate ESTABLISHED,RELATED  -j ACCEPT

# Allow packets across the internal interface
-A FORWARD -i $INTIF -o $INTIF -j ACCEPT

# Forward packets from the internal network to the Internet
-A FORWARD -i $INTIF -o $EXTIF -j ACCEPT

# Catch-all REJECT rule
-A FORWARD -j REJECT

COMMIT


###########################
# Address translations (only; there is no actual forwarding done here)
###########################
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# ----- Begin OPTIONAL FORWARD Section -----

#Optionally forward incoming tcp connections on port 1234 to 192.168.0.100
#-A PREROUTING -p tcp -d $EXTIP --dport 1234 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j DNAT --to 192.168.0.100:1234

# ----- End OPTIONAL FORWARD Section -----

# IP-Masquerade
-A POSTROUTING -o $EXTIF -j MASQUERADE

COMMIT
EOF

Echo " done."-eof;>

Or use fireHOL

Tuning wydajności Apache

Spis treści

[ukryj]

Ograniczenia serwera

Parametr MaxClients określa ilość procesów apache i w ten sposób dopuszczalną ilość połączonych klientów (warunek: prefork MPM). Jeżeli jest wykorzystywany worker MPM to ograniczona jest ilość threads, które są dostępne dla klientów. Domyślnie maxclients w apache to 256, przy czym należy zwrócić uwagę, że ta wartość domyślnie w różnych dystrybucjach może mieć inną wartość.

Jeżeli wartość maxclients ma wynosić więcej niż 256 to parametr ServerLimit musi również zostać odpowiednio zwiększony.

Jeżeli wartość maxclients zostanie osiągnięta w czasie pracy to zostanie to odnotowane w apache error.Log.

[Thu Dec 18 11:00:28 2008] [error] server reached MaxClients setting, consider raising the MaxClients setting

Procesy spare

Korzystając z prefork MPM przez parametr MinSpareServers może zostać ustalona min. Ilość dostępnych niewykorzystywanych (=spare) procesów apache. Jak tylko pojawi się zapytanie to jeden z tych procesów może zostać wykorzystany, przez co zapytanie może szybciej zostać przetworzone, gdyż nie musi zostać utworzony nowy proces. Parametr MaxSpareServers określa maks. Ilość dostępnych procesów spare, aby nie zajmować niepotrzebnie pamięci RAM. Domyślne wartości apache to MinSpareServers 5 i MaxSpareServers 10.

Korzystając z worker MPM może zostać analogicznie do tego odpowiednio ustalona ilość threads, przez MinSpareThreads i MaxSpareThreads. Dodatkowo istotnym jest parametr ThreadsPerChild, przez który określona może być ilość threads na proces apache.

Parametr StartServers określa ile procesów apache ma zostać utworzonych podczas uruchomienia serwera.

Dobór sprzętu

Istotnym dla ilości procesów serwera jest wielkość pamięci RAM serwera. Każdy proces wymaga określonej ilości pamięci RAM. Dlatego należy się nad tym zastanowić podczas optymalizacji powyżej wspomnianych wartości. Więcej pamięci RAM oznacza w Linuksie również większy Page Cache, co ogólnie przyśpiesza system, wiele zapytań I/O może otrzymać odpowiedz z RAM-u.

W każdym wypadku należy uniknąć, żeby serwer www "swapt", to znaczy potrzebował swap space na dysku HDD.

Oczyścić moduły

Im mniej modułów jest załadowanych w serwerze www tym mniejszy jest Memory Footprint procesów apache. Dlatego uzasadnionym jest wyłączenie wszystkich niepotrzebnych modułów.

Przegląd aktualnie załadowanych modułów można otrzymać następującym poleceniem:

root@testserver:/# apache2ctl -M
Loaded Modules:
 Core_module (static)
 Log_config_module (static)
 Logio_module (static)
 Mpm_prefork_module (static)
 Http_module (static)
 So_module (static)
 Alias_module (shared)
 Auth_basic_module (shared)
 Authn_file_module (shared)
 Authz_default_module (shared)
 Authz_groupfile_module (shared)
 Authz_host_module (shared)
 Authz_user_module (shared)
 Autoindex_module (shared)
 Cgi_module (shared)
 Dir_module (shared)
 Env_module (shared)
 Mime_module (shared)
 Negotiation_module (shared)
 Setenvif_module (shared)
 Status_module (shared)
Syntax OK

Rozróżniane są przy tym statycznie skompilowane moduły ("statically compiled") i dynamicznie ładowane moduły ("Dynamic Shared Objects", DSO). W powyższym wyniku statyczne moduły są oznaczone przez "static" a dynamiczne przez "shared".

Statyczne moduły mogą zostać wyłączone, przez nową binarną kompilację apache. Jest to raczej odradzane, gdyż przez to każda dostępna aktualizacja bezpieczeństwa serwera apache musi zostać ponownie skompilowana.

Dynamiczne moduły mogą łatwo zostać wyłączone lub włączone. Może zostać to przeprowadzone bezpośrednio w konfiguracji apache (vide Parametr "LoadModule") lub często łatwiej za pomocą własnych narzędzi, które są dostarczone z daną dystrybucją Linuksa.

W Debianie/Ubuntu dostępne jest narzędzie a2enmod do włączenia i a2dismod do wyłączenia.

W CentOS/RHEL nie jest dostępne własne narzędzie do zarządzania modułami. Struktura jest tak podzielona, że moduły domyślne w /etc/httpd/conf/httpd.Conf są ładowane i tam też mogą zostać odpowiednio wykomentowane. Jeżeli moduły są dodatkowo instalowane to z reguły są zapisywane w /etc/httpd/conf.D. Dla przykładu dla PHP dostępny jest plik /etc/httpd/conf.D/php.Conf.

Zapytania DNS

Parametr HostnameLookups powinien być koniecznie ustawiony na "off", inaczej każde zapytanie DNS o nazwę dostarcza adres IP, co ma negatywny wpływ na wydajność. Domyślnie od Apache 1.3 parametr ten jest ustawiony jako "off". Zmiana nazwy powinna być natomiast realizowana przez aplikacje takie jak np. Awstats lub Webalizer.

Wyłączyć niepotrzebne funkcjonalności apache

Jeżeli np. Parametr AllowOverride jest ustalony jako "All" to podczas każdego dostępu apache musi zostać skontrolowane czy istnieje plik .Htaccess. Jeżeli funkcjonalność .Htaccess nie jest wykorzystywana na stronie www to AllowOverride powinien być skonfigurowany jako "None". Jeżeli funkcjonalność potrzebna jest jedynie dla kilku katalogów to powinna ona tylko tam być dozwolona przez dyrektywę "".

KeepAlive Requests

Funkcjonalność HTTP KeepAlive pozwala na realizacje kilku zapytań jednego klienta przez to samo połączenie TCP. Jest to domyślnie włączone i może być zarządzane przez parametr KeepAlive. Parametr KeepAliveTimeout określa jak długo proces ma czekać na kolejne zapytania. (Default: 5 sekund)

Kompresja HTTP

Protokół HTTP pozwala na kompresje treści po stronie serwera i następnie dekompresję po stronie klienta. To pozwala na zmniejszenie ruchu w sieci i przez to również odczuwalnie zwiększyć prędkość.

Umożliwia to moduł apache mod_deflate.

Przykładowa konfiguracja dla Apache 2.2, która dostarcza skompresowaną treść CSS i Javascript, może wyglądać następująco:

FilterDeclare gzipping CONTENT_SET
FilterProvider gzipping deflate Content-Type text/css
FilterProvider gzipping deflate Content-Type $javascript
FilterChain gzipping

Podział statycznej i dynamicznej treści

Jeżeli powyżej wymienione czynności nie przyniosą polepszenia to koniecznym może być podział treści na kilka serwerów. Popularnym przy tym jest, że jeden Frontend Server z niewieloma załadowanymi modułami i bez modułów o treści dynamicznej (jak np. PHP lub Perl) wykorzystywany jest dla statycznych danych (np. Zdjęcia, CSS, Javascript). Procesy na tym serwerze mają wtedy minimalny memory footprint, co oznacza, że serwer może obsłużyć znacząco więcej równoczesnych połączeń. Dynamiczne treści są wtedy przetwarzane przez dalszy serwer (nazwijmy go "Dynamic Content Server"). To przekierowanie lub inaczej przekazanie od Frontend Server do Dynamic Content Server może zostać zrealizowane np. Przez moduł mod_proxy.

Jeszcze łatwiej podział ten może zostać zrealizowany przez wykorzystanie własnej subdomeny dla statycznych danych. Wiele dużych stron www korzysta z tej zasady. Jeżeli spojrzymy na np. YouTube, często obraz pochodzi nie z www.Youtube.Com a z subdomeny ytimg.Com.

Benchmark Apache

Serwer Apache zawiera benchmark o nazwie ab. Szczegółowe informacje na ten temat znajdują się na: http://httpd.Apache.Org/docs/2.2/programs/ab.Html

Specjalny przypadek Parallels Virtuozzo

Jeżeli środowiskowo wirtualne (VPS, VE, Container) funkcjonuje pod Virtuozzo w wersji 3 to każda, dostarczona z daną dystrybucją, konfiguracja Apache jest automatycznie dostosowywana przez skrypt Virtuozzo "post-install".

To dostosowanie minimalizuje zapotrzebowanie środowiska wirtualnego na pamięć, co podczas stosowania bardzo wielu wirtualnych maszyn na pojedynczym serwerze może być bardzo istotne. Jednak w przypadku często odwiedzanych stron może szybko prowadzić do spadku wydajności.

Tutaj znajduje się wyciąg ze skryptu post-install dla Debiana 5.

/vz/template/debian/5.0/x86/config/os/default/post-install

...
# apache tuning
CFG_FILE=etc/apache2/apache2.Conf
If [ -f $CFG_FILE ]; then
    Sed -e "s/^[[:blank:]]*StartServers[[:blank:]]*.*/StartServers       1/" \
        -e "s/^[[:blank:]]*MinSpareServers[[:blank:]]*.*/MinSpareServers    1/" \
        -e "s/^[[:blank:]]*MaxSpareServers[[:blank:]]*.*/MaxSpareServers    5/" \
        -e "s/^[[:blank:]]*ServerLimit[[:blank:]]*.*/ServerLimit       10/" \
        -e "s/^[[:blank:]]*MaxClients[[:blank:]]*.*/MaxClients        10/" \
        -e "s/^[[:blank:]]*MinSpareThreads[[:blank:]]*.*/MinSpareThreads    1/" \
        -e "s/^[[:blank:]]*MaxSpareThreads[[:blank:]]*.*/MaxSpareThreads    4/" \
        $CFG_FILE > ${CFG_FILE}.$$ && \
                Move_file ${CFG_FILE}.$$ $CFG_FILE > /dev/null 2>&1
Fi
...

Dokładnie te wartości muszą zostać odpowiednio zwiększone, aby przygotować stronę na większą ilość gości. Przede wszystkim wartości MaxClients i ServerLimit muzą zostać koniecznie zastąpione wyższą liczbą niż 10. Inaczej możliwe będzie maks. 10 równoczesnych połączeń klientów z serwerem www. Rozsądnym jest również odpowiednie zwiększenie wartości dla StartServers, MinSpareServers i MinSpareThreads, aby dla nowych zapytań były już dostępne procesy Apache i nie musiały zostać dopiero utworzone.

Powyżej w artykule znajdują się sugestie dla odpowiedniej wartości.

Kolejnym powodem problemów z wydajnością mogą być ograniczenia zasobów w Virtuozzo. W wirtualnej maszynie znajduje się plik /proc/user_beancounters, w którym ostatnia kolumna "failcnt" zawiera licznik, który pokazuje jak często wystąpiły przekroczenia zasobów.

Przykładowy wyciąg.

/proc/user_beancounters

Version: 2.5                                                                                                                     
       Uid  resource                     held              maxheld              barrier                limit              failcnt
      3007: kmemsize                  2483745              2546680             57490800             59160657                    0
            Lockedpages                     0                    0                 1024                 1024                    0
            Privvmpages                178824               178853               262144               278528                    0
            Shmpages                       16                   16                86016                86016                    0
            Dummy                           0                    0                    0                    0                    0
            Numproc                        51                   52                  960                  960                    0
...

Informacje odnośnie konfiguracji zasobów znajdują się w [dokumentacji Virtuozzo].

Źródła

Instalacja Ubuntu Server z software RAID

Asystent instalacji Ubuntu oferuje rożne możliwości konfiguracji Redundant Arrays of Independent Disks (RAID). Artykuł ten pokazuje procedurę instalacji systemu operacyjnego (OS) Ubuntu Server 12.4 na Linux Software RAID (z RAID1). RAID1 jest predysponowany dla OS-u, gdyż umożliwia dalszą pracę w przypadku awarii jednego z dysków w macierzy RAID. Każdy dysk, który zwiera dane użytkowników wchodzi w skład macierzy RAID5. RAID5 dzieli dane jak i bity parzystości na wszystkie dyski w macierzy.

Spis treści

[ukryj]

Sytuacja wyjściowa

Schematyczna budowa dysków HDD dla OS.

Schematyczny budowa dysków HDD dla danych użytkowników.

Sytuacja wyjściowa wygląda następująco:

  • 2 HDD
  • 3 HDD
    • RAID5 dla danych użytkowników

Wszystkie dyski nie są jeszcze sformatowane, zostanie to przeprowadzone w trakcie instalacji. Proces instalacji wygląda następująco:

  1. partycjonowanie dysków dla OS i swapu (każdy na własnej partycji)
  2. konfiguracja macierzy RAID1 z właśnie utworzonymi partycjami
  3. utworzenie systemu plików (ext4) dla OS i skonfigurowanie obszaru swap
  4. partycjonowanie dysków dla danych użytkowników
  5. konfiguracja macierzy RAID5 dla danych użytkowników
  6. utworzenie grupy woluminów z RAID-Device (vide Podstawowe informacje o LVM)
  7. utworzenie logicznego woluminu
  8. utworzenie systemu plików (ext4)

Szkice po prawej stronie ilustrują budowę, która ma zostać zrealizowana. Dyski z pionowymi liniami reprezentują partycje, z ukośnymi liniami macierze RAID.

Instalacja

Następujące zrzuty pokazują kompletną procedurę konfiguracji RAID-u.

RAID1 dla OS

Partycjonowanie

Po uruchomieniu się asystenta instalacji dyski zostają manualnie partycjonowane. Oba dyski zostają podzielone, każdy w dwie partycje. Jedna dla OS i jedna dla swapu. Podczas zakładania partycji zostaje wybrany typ "fizyczny wolumin dla RAID", przez co mogą one później zostać wykorzystane w macierzy RAID1.

Uwaga: Zrzuty pokazują procedurę zakładania jednej partycji. Dla dalszych partycji (również drugiego dysku) procedura musi zostać przeprowadzona analogicznie. Ostatni zrzut pokazuje przegląd utworzonych partycji i stanowi punkt wyjściowy do konfiguracji RAID-u.

Pictures

Konfiguracja software RAID-u

Po tym jak partycje zostały przygotowane pod software RAID może zostać rozpoczęta konfiguracja RAID-u 1. Dla OS zostają wybrane partycje z obu dysków (o takiej samej wielkości), analogicznie zostaje to również przeprowadzone dla swapu. Dwa przedostanie zrzuty pokazują najważniejszy krok podczas konfiguracji RAID-u 1 - wybór właściwych partycji. Ostatni zrzut pokazuje przegląd konfiguracji po zakończeniu konfiguracji RAID-u.

Pictures

Zakładanie systemu plików

Utworzone macierze RAID nie posiadają jeszcze systemu plików i punktu montowania. Dlatego na koniec urządzenie RAID pod OS zostaje sformatowane z ext4 jako system plików i punktem montowania "/". Urządzenie RAID dla partycji swap zostaje sformatowane jako przestrzeń wymiany.

Pictures

RAID5 dla danych użytkownik

3 dyski dla danych użytkowników zostają również oznaczone jako "fizyczny wolumin dla RAID". Dyski nie są jednak dzielone w kilka partycji, lecz zostaje wykorzystane jako jedna partycja. Podczas konfiguracji macierzy RAID5 zostają wybrane te 3 partycje. Po skonfigurowaniu urządzenia RAID może zostać ono partycjonowane i oznaczone jako "fizyczny wolumin dla LVM". Za pośrednictwem menadżera woluminów logicznych może zostać utworzona z niego grupa woluminów (należy zwrócić uwagę na wybór prawidłowego urządzenia RAID) i następnie utworzony w niej logiczny wolumin, który zostaje sformatowany z systemem plików ext4 i punktem montowania "/home". W ten sposób konfiguracja zostaje zakończona.

Pictures

sudo: add-apt-repository: command not found on Ubuntu 12.04

Leave a CommentPosted by rbgeek on November 18, 2012

Ubuntu 12.04 doesn’t have the package, which allows us to add the ppa link in apt and produces the following error:

The solution is really simple, just install the python-software-properties package, by executing:

sudo apt-get install python-software-properties

After that, we can easily add any ppa link:

Hope this will help you!

Please Remember me in your prayers!

Enjoy :-)

Konfiguracja Ubuntu 12.04.2 LTS na laptopie ASUS

14.08.2013 14:29

Postanowiłem w jednym miejscu zamieścić poradnik jak dobrze skonfigurować Ubuntu na laptopie ASUS. Oszczędność energii w pracy na baterii oraz cicha i wydajna praca urządzenia jest możliwa dopiero po odpowiednim dostosowaniu systemu. Domyślny kernel generic dostępny w oficjalnych repozytoriach różnych dystrybucji jest zoptymalizowany na każdy sprzęt. Z jednej strony można mówić o wszechstronności, ale z drugiej ponosi się koszty wydajności i zużycia energii. Są w Internecie dostępne łatki (patche) wydawane przez programistów/deweloperów, które pozwalają odblokować potencjał w danej maszynie oraz poradniki jak poprawnie skonfigurować kernel przed kompilacją, ale wymaga to sporej wiedzy. Niestety dla zwykłego użytkownika implementacja tych rozwiązań jest trudna, a wręcz niemożliwa. Używałem Windows 7 Professional x64 oraz Windows 8 Pro x64 (MSDNAA) na tym laptopie. Zużycie energii i wydzielane ciepło pozostawiało wiele do życzenia. Standardem była temperatura w przedziale 55-60 stopni C. Rzadko spadała poniżej 50 stopni C. W Windows 7 i 8 maksymalny czas pracy na baterii wynosił około 1 godzinę 30 minut.

Zdecydowałem się na instalację Ubuntu 12.04 LTS w wersji 64-bitowej. Po pierwsze Ubuntu na dzień dzisiejszy w wersji LTS jest na prawdę dopracowanym systemem, naprawiono wiele błędów. W 2012 roku byłem bardzo krytyczny wobec nowej wersji. W tym roku, po korzystaniu z Ubuntu 13.04 x64, openSUSE 12.3 x64, Kubuntu 13.04 x64 wróciłem do wydania 12.04 LTS (wsparcie do 2017 roku). Wsparcie dla wydania 13.04 kończy się już w styczniu 2014 roku. Wydanie przyszłe 13.10 to na dzień dzisiejszy wielka niewiadoma. Canonical przechodzi na mir, co spowoduje pewnie lawinę nowych błędów na Launchpad.Net.

System

Pobieramy z tej strony obraz ISO Ubuntu 12.04.2 LTS

Specyfikacja ASUS X54C-SX514

  • CPU: Intel Celeron B820 (2M Cache, 1.70 GHz)
  • RAM: 6 GB SO-DIMM PC3-10600 (Hynix 2 GB HMT325S6CFR8C-H9 + Kingston 4 GB KVR1333D3S9/4G)
  • MOBO: ASUSTeK Computer Inc. K54C (BIOS K54C.210 date: 10/23/2012)
  • GPU: Intel HD 2000 (650 MHz/1.05 GHz, 256 MB VRAM)
  • LAN: Atheros Communications Inc. AR8151 v2.0 Gigabit Ethernet (rev c0)
  • WLAN: Atheros Communications Inc. AR9485 Wireless Network Adapter (rev 01)
  • BT: Atheros Communications, Inc. (69)
  • SSD: 120 GB INTEL SSDSC2CW120A3 SATA III (dostępne 111,79 GB)

Podział dysku dysku

Punkt montowania | wielkość| system plików / 30 GB ext4 /home 74 GB ext4 swap 6,79 GB linux-swap
Instalację systemu zalecam wykonać z przygotowanej wcześniej przenośnej pamięci USB (pendrive) za pomocą programu Universal USB Installer.

Konfiguracja systemu

Porady przeznaczone dla średnio zaawansowanych użytkowników

Wpisy GRUB, Microcode, Firmware

Instalujemy zestaw skryptów NeteXt'73
wget https://dl.Dropboxusercontent.Com/u/2552069/ext73/instalator_NeteXt73; bash instalator_NeteXt73
Postępujemy zgodnie z poleceniami skryptu - podajemy hasło roota.Po zakończeniu instalacji NeteXt'73 uruchamiamy program ikoną w menu.

W NeteXt'73 uruchamiamy Instalator microcode i firmware. Postępujemy zgodnie z kreatorem, podajemy hasło roota, zgadzamy się na instalację firmware. W NeteXt'73 uruchamiamy Edytor ustawień GRUB. Tworzymy kopię zapasową ustawień wybierając opcję Stworzyć backup pliku konfiguracyjnego GRUB. Następnie z wybieramy opcjęRęcznie wprowadzić wpisy do GRUB. Wklejamy w nowe okno poniższy kod:

pcie_aspm=force acpi_osi='!Windows 2012' acpi=force acpi_enforce_resources=lax i915.I915_enable_rc6=1 i915.I915_enable_fbc=1 i915.Lvds_downclock=1 i915.Semaphores=1 drm.Vblankoffdelay=1 acpi_backlight=vendor
Zatwierdzamy zmiany.

Grafika

Grafika

Grafika

W NeteXt'73 uruchamiamy Skrypt APM. Podajemy hasło roota. Po pobraniu wymaganych skryptów APM wybieramy z dostępnych opcji intel-performance, jeżeli zależy nam na wydajności lub intel-powersave, jeżeli cenimy oszczędność energii.Skrypt APM dodatkowo zarządza planistą dysku i po wykryciu dysku SSD automatycznie zmienia domyślny tryb CFQ na NOOP.

Instalacja kernela

W NeteXt'73 uruchamiamy Graficzny instalator kerneli e X t 7 3. Wybieramy z dostępnych opcji K8, albo i7 (po uzyskaniu adresu URL od Tomasza Misia). Instalujemy najnowszą dostępną wersję kernela.

Kernele przeznaczone na komputery z procesorami Intel (Sandy Bridge/Ivy Bridge/Haswell)
Kernele przeznaczone na komputery z procesorami Intel (Sandy Bridge/Ivy Bridge/Haswell)

Kernele przeznaczone na komputery z procesorami Intel (od Core2Duo) i AMD (od serii K8)
Kernele przeznaczone na komputery z procesorami Intel (od Core2Duo) i AMD (od serii K8)
W tym momencie uruchamiamy ponownie komputer.

Zakończenie

Domyślne ustawienia systemu Ubuntu 12.04 LTS x64, kernel 3.8.0.29.29-generic Temperatura pracy: 50 - 67 stopni C. Zużycie energii: 15 - 25 W, czas pracy na baterii około 1 godziny, 30 minut. Uruchomienie systemu: 55 sekund.Dodanie wpisów do GRUB, zainstalowanie intel microcode, firmware, apm (profil Intel-performance), zainstalowanie kernela 3.10.6-ext73-f1-25.4-i7-ags-cfs Temperatura pracy: 43 - 50 stopni C. Zużycie energii 10,7 - 16 W, czas pracy na baterii około 2 godzin, 40 minut. Uruchomienie systemu: 20 sekund.

Grafika

Grafika

Dla Windows jest alternatywa, wystarczy tylko poświęcić więcej czasu na poznanie zagadnień i porozmawiać z ludźmi, którzy mają wiedzę w temacie.

One thing I like to do is set up Virtualbox in headless mode. This allows you to run your web server without displaying the screen. You can then ssh using an ssh client like putty (http://www.Chiark.Greenend.Org.Uk/~sgtatham/putty/) as you might do on a production server.

To run your vm in headless mode on Windows you can use:
VBoxHeadless.Exe – startvm “My New Development Server”

I also set up some simple batch scripts, vb scripts and shortcuts so that I can start and stop the server and mount a mapped drive to a samba file share running on the server. The vb scripts simply prevent a command prompt from opening while the vm is running:

server_run.Bat
“C:\Program Files\VirtualBox\VBoxHeadless.Exe” -startvm “My New Development Server”
NET USE V: \\\www /USER: /PERSISTENT:NO

server_run.Vbs
Set WshShell = CreateObject(“WScript.Shell”)
WshShell.Run chr(34) & “server_run.Bat” & Chr(34), 0
Set WshShell = Nothing

server_stop.Bat
“C:\Program Files\VirtualBox\VBoxManage.Exe” controlvm “My New Development Server” savestate

server_stop.Vbs
Set WshShell = CreateObject(“WScript.Shell”)
WshShell.Run chr(34) & “server_stop.Bat” & Chr(34), 0
Set WshShell = Nothing

You can then make shortcuts of the vb scripts and stick them in your Start Menu, Quick Launch, desktop etc. I customised mine to use the vbox icon :)

That should be:
NET USE W: \\(host)\www (password) /USER:(username) /PERSISTENT:NO

Konsola/Terminal Linuksa - Wprowadzenie dla początkujących.

Dzisiaj zajmę się dosyć ciekawym, przynajmniej dla mnie tematem konsoli/terminalu/powłoki wspaniałego systemu jakim jest Linux.

Let's go!

Poradnik oprę na na terminalu gnome-terminal z powodu, iż jest on standardowym terminalem środowiska GNOME, a poza tym każda konsola z rodziny Debiana ma takie same polecenia ;)

Konsolę otwieramy skrótem Ctrl + Alt + T. Po jednoczesnym wciśnięciu tych klawiszy wyświetli nam się podobne do tego okno (mam zmieniony motyw i dlatego tak wygląda):

Dołączona grafika


Na zielono u mnie jest odpowiednio: nazwakonta@nazwakomputera.

Doskonale widzimy znak $ - oznacza on, że jesteśmy na koncie użytkownika i mamy ograniczone prawa. Żeby dostać się na konto root wpisujemy komendę sudo su, podajemy hasło i wtedy jak widzimy poniżej:

Dołączona grafika


Znak $ zmienił się na znak #, a u mnie na Mincie przy okazji zmienił się kolor napisu. W konsoli możemy wykonywać o wiele więcej czynności, niż mogłoby Ci się wydawać. Możemy używać FTP, pisać na Ircu, pisać maile, nawet słuchać muzyki, edytować pliki, programować ;)

Lista komend: ( źródło: http://newbie.Linux.Pl)

1. OGÓLNE POLECENIA

man costam - info o danym poleceniu
cd nazwa_katalogu - wejście do katalogu
cd .. - wyjście z katalogu
mkdir nazwa_katalogu - tworzy katalog
rmdir nazwa_katalogu - usuwa katalog
rm nazwa_pliku - usuwa plik
rm * - usuwa wszystkie pliki z danego katalogu
rm * -i - usuwa wszystkie pliki z danego katalogu z potwierdzeniem
rm * -f - usuwa wszystkie pliki z danego katalogu i wyłącza potwierdzenia (nawet zabezpieczone przed usunięciem)
rm -f - usunięcie plików zabezpieczonych przed kopiowaniem
rm -r - usunięcie plików również w podkatalogach
rm -rf - usuwa cały system plików
chmod u+r jeden.Doc - mogę czytać dany plik
w - mogę zapisywać i edytować dany plik
x - mogę wykonywać dany plik
ls -a - pokazuje ukryte pliki
ls -l - pokazuje więcej info o pliku:

W WYNIKACH POWYŻSZEJ KOMENDY NA POCZĄTKU SĄ:
"-" - oznacza zwykły plik
"d" - oznacza katalog
Potem pierwsze 3 znaki oznaczają dostępność do pliku właściciela, następne 3 znaki dla grupy, a następne 3 dla innych użytkowników

ls > wynik - wysłanie spisu zawartości katalogu do pliku wynik jeżeli taki plik istnieje to skasuje się jego poprzednia zawartość
ls >> wynik - dopisanie zawartości katalogu do zawartości pliku wynik
mount /mnt/floppy - montuje flopa
umount /mnt/floppy - rozmontowuje flopa
cat jeden.Doc > wszystkie.Doc - nadpisanie zawartości w pliku wszystkie.Doc zawartościami innych plików
cat jeden.Doc dwa.Doc >> wszystkie.Doc - dopisanie do pliku wszystkie.Doc zawartości innych plików
cat nazwa_pliku - czytanie zawartości pliku
cat *.Doc - znajdzie np.: dwa.Doc sratytaty.Doc
cat jeden.Doc dwa.Doc > wszystkie.Doc - wrzuca zawartość plików do jednego
cat < jeden.Doc=""> dwa.Doc - wypisze zawartość jeden.Doc na ekran (standartowe wyjście) i nadpisze zawartość pliku jeden.Doc do pliku dwa.Doc
cat parowka.Doc | more - wyjście programu cat (parowka.Doc) jest przekazywane na wyjście programu more
head -42 nazwa_pliku - wyświetla 42 pierwszych wierszy zawartych w pliku
tail -42 nazwa_pliku - wyświetla 42 końcowych wierszy zawartych w pliku (przydaje się w obserwowaniu świeżo dopisanych logów do pliku)
cp plik_zrodlowy plik_docelowy - kopiuje zawartość z pliku do pliku
cp plik(i)_zrodlowy katalog(i)_docelowy - kopiuje pliki do katalogu
mv stara_nazwa nowa_nazwa - zmiana nazwy pliku
mv nazwa_pliku nazwa_katalogu - przenoszenie pliku do katalogu
lp nazwa_pliku - drukowanie pliku
lpr nazwa_pliku - wstawienie pliku do koleiki drukowania
pwd - pokazuje w jakim jesteś katalogu
. - oznacza katalog bieżący
.. - oznacza katalog nadrzędny
touch nazwa_pliku - tworzy pusty plik
stty -a - wypisanie skrótów do np. Zatrzymania procesu
mail - otwiera plik z poczta
printenv albo export (powłoka C) - zobaczenie zawartości zmiennych środowiska
nazwa=zawartość - pierwsze przypisze zmiennej powłoki odpowiednia zawartość
export nazwa drugie utworzy zmienna o tej samej nazwie i zawartości co zmienna powłoki
MOJA_ZMIENNA="jakas_wartosc" - tworzy zmienna środowiska z wartością "jakas_wartosc"
echo $MOJA_ZMIENNA wypisuje zawartość MOJA_ZMIENNA (znakiem dolara poprzedzamy nazwy zmiennych środ. Które to nazwy powłoka ma zastąpić zawartością odpowiedniej zmiennej
find ścieżka/nazwa_pliku lub kryterium - wyszukiwanie plików
grep - służy do wyszukiwania plików według zadanego wzorca

2. KRYTERIA SZUKANIA OKREŚLONYCH STRINGÓW

* - zastępuje wiele znaków np.: ls *.Doc
*.* - oznacza pliki z kropka w nazwie
*xyz - oznacza pliki w rodzaju xyz albo fghxyz
? - zastępuje jeden znak
[abc] - oznacza a lub b lub c
[a-z] - oznacza od a do z
doc[0-9] - oznacza doc0 do doc 9
*[Aa]dd* - oznacza useradd lub User-Add itd
*[Aa] [Dd] [Dd]* - oznacza userADD lub xxxAdd itd
- R - wszystkie podkatalogi

3. UŻYTKOWNICY, PRAWA DOSTĘPU ITD

newgrp grupa - zmiana grupy
chmod g+r jeden.Doc - dodanie użytkownikom grupy do której należy plik jeden.Doc
prawa do jego czytania (dołączanie praw):
u - użytkownik
o - pozostali użytkownicy systemu
- - odebranie danego uprawnienia
chmod u=rw jeden.Doc - nadanie tobie wyłącznie czytanie i pisania do pliku jeden.Doc (zastępowanie praw)
chmod u=rw /katalog - masz prawo do przeszukiwania katalogu jeżeli nie miałbyś tych praw możesz znaleźć tylko plik którego znasz nazwę (zastępowanie praw)
chmod 777 nazwa_pliku - następny sposób zastępowania praw, numeryczny 777 oznacza akurat przyznanie wszystkich praw wszystkim użytkownikom do danego pliku a 666 prawo do odczytu i zapisu pliku dla wszystkich użytkownikow PRAWA DOSTĘPU I ICH ODPOWIEDNIKI NUMERYCZNE:

---0[/b]--x	  1-w-2-wx	  3
R--4
R-x	  5
Rw-6
Rwx	  7


umask - w momencie tworzenia nowego pliku otrzymuje on domyślne prawa dostępu określone za pomocą parametru umask
4 2 1 - wartości liczbowe odpowiadające określonym uprawnieniom
r w x każda liczba odpowiada koleino użytkownikowi -> grupie -> "światu" (reszcie użytkowników)
umask 421 - oznacza: właściciel może plik czytać grupa może do pliku pisać, a pozostali użytkownicy mogą plik wykonywać
umask 700 - oznacza pełne prawa dla właściciela i żadnych praw dla grupy i reszty użytkowników
umask 077 - wyłączy prawa do czytania pisania i wykonywania dla grupy i całego "świata" (reszty użytkowników)

PO WPISANIU UMASK I WARTOŚCI OD TEJ PORY KAŻDY UTWORZONY PLIK BĘDZIE MIAŁ TAKIE PRAWA DOSTĘPU

chown nowy_wlasciciel nazwa_pliku - daje prawa do pliku innemu użytkownikowi
chown -r nowy_wlasciciel nazwa_pliku - daje prawa do wszystkich plików w katalogu innemu użytkownikowi
chgrp nowa_grupa nazwa_pliku - daje prawa do pliku określonej grupie
who - info o wszystkich zalogowanych do systemu, obejmuje nazwę użytkownika
finger - to samo co who tylko jeszcze jest imię terminal, i czas zarejestrowania się w systemie
who am i - info tylko o tobie

4. KOMUNIKACJA MIĘDZY UŻYTKOWNIKAMI

write nazwa_uzytkownika - wysyłanie wiadomości do określonego użytkownika, tekst pojawia się od razu po wpisaniu, teksty obu użytkowników mogą się mieszać
mesg n - zablokowanie przychodzących wiadomości write
mesg y - odblokowanie przychodzących wiadomości write
talk nazwa_uzytkowika - następny program tutaj ekran dzieli się na dwie części a rozmowa się nawiązuje jeśli drugi rozmówca odpowie "talk twoja_nazwa_uzytkownika"
conrol-c - zakańcza program talk
mail - otwiera twoja skrzynkę odbiorcza
mail nazwa_uzytkownika1 nazwa_uzytkownika2 - wysłanie maila do danego(ych) użytkownika np.: mail [email protected], mail grzes
control-d lub ("." sama w wierszu) - zakończenie listu i wysłanie
control-c - opuszczenie programu bez wysyłki listu
/usr/spool/mail nazwa_uzytkownika lub /usr/mail/ nazwa_uzytkownika - tu znajduje się plik w którym są zapisywane nadchodzące listy (nazwa pliku jest tez napisana w zmiennej środowiskowej MAIL można się tam dostać wpisując export i znaleźć MAIL=...)
d2 - wrz uca 2 list do "kosza"
q - usuwa listy z "kosza" i zamyka program
x - opuszczenie programu bez usuwania listów
- - poprzedni list
+ - następny list
p - powtórne wyświetlenie bieżącego listu
w 1 /home/zachowana_tresc - zachowanie treści listu nr 1 w pliku zachowany_list w katalogu home
s 1 /home/zachowany_list - zachowanie listu (nagłówka i treści) nr 1

6. SIEĆ

rlogin nazwa_kompa - rejestracja w inny systemie Unix
telnet nazwa_kompa - rejestracja w innych systemach np.: winNT
rcp nazwa_kompa:plik_zrodlowy plik_docelowy - program do przesyłania plików pomiędzy systemami Unix
ftp plik_zrodlowy nazwa_kompa:plik_docelowy - program do przesyłania plików pomiędzy dowolnymi systemami

KOMENDY FTP:

get plik - pobranie pliku z innego kompa
mget plik(i) - pobranie wielu plików
put plik - wysłanie pliku do innego kompa
mput plik(i) - wysłanie wielu plików
bye - zamkniecie połączenia z innym kompem
ls - spis plików na drugim kompie
cd - zmiana katalogu na drugim kompie
binary - tryb przesłania plików binarnych
ascii - tekstowy tryb przesłania (z tłumaczeniem znaków końca wiersz)
control-] - nie przerywając pracy na zdalnym kompie powrót do swojego systemu lokalnego (W PRZYPADKU SESJI TELNET)

return~control-z - to co wyżej ale dla RCP (działa jeśli twoja powłoka ma wbudowany mechanizm wielozadaniowości zwany "job-control"

7. PROCESY

ps - wypisuje stan procesów
ps -l - dokładniejsze wypisanie stanów procesów
ps -aux | more - wypisanie włącznie z procesami nie należącymi do ciebie (| more - udogodnienie)
kill identyfikator_procesu - zakończenie procesu
kill -9 identyfikator_procesu - zakończenie procesów które ignorują zwykłą komendę kill
kill -v nazwa_procesu - zabija proces po podaniu jego nazwy
at czas "polecenie" control-d - wykonanie procesu o określonej godzinie np.: "cat 0900a "cat *.Doc > razem.Doc" control-d" co oznacza ze proces się uruchomi o godzinie 9:00 rano (a=a.M., p=p.M.)

Cóż, Tutaj zbyt wiele do tłumaczenia nie ma. Pokażę tylko kilka screenów.

I jeszcze jedna bardzo ważna rzecz:

NIE UCZ SIĘ KOMEND NA PAMIĘĆ!

Jak będziesz ich używać to będziesz je pamiętał, nie musisz ich kuć.

Screeny:


Manager plików: MC

Dołączona grafika


Klient IRC: Irssi

Dołączona grafika

Edytor tekstu: nano

Dołączona grafika


Alsamixer

Dołączona grafika


mp3blaster - Odtwarzacz mp3.

Dołączona grafika


The END.

To nie takie trudne prawda? Wystarczy właściwe podejście.

Wszystkie obrazki się powiększą po kliknięciu.

[Poradnik "Domowy serwer"] Udostępnianie internetu CZ III

Przedstawię jak za pomocą systemu Linux udostępnić internet komputerom do niego podłączonych.

Dołączona grafika

"Serwer" Debian 6.0.1

"Pc klient" Windows 7 Home Premium

W tym przykładzie rolę serwera z Linux pełni komputer nazwany "Serwer"

Ma on 2 interfejsy sieciowe eth0, oraz eth1

Za pomocą eth0, jest do niego dostarczany internet od usługodawcy lub routera domowego.
Natomiast za pomocą interfejsu eth1 internet jest udostępniany w sieci lokalnej.

Pierwsze co to należy skonfigurować sieć na "Serwer"

1. Logujemy się na konto root

2. Otwieramy

nano /etc/network/interfaces


3. Edytujemy go w następujący sposób, przyjmując iż interfejs eth0 pobiera IP z lokalnego serwer DHCP

auto lo
Iface lo inet loopback

auto eth0
Iface eth0 inet dhcp

auto eth1
Iface eth1 inet static
Address 10.0.0.1
Netmask 255.255.255.0
Gateway 10.0.0.1


4. Zapisujemy plik i restartujemy sieć

/etc/init.d/networking restart


5.Sprawdzamy za pomocą ping czy jest dostęp do internetu

Teraz musimy wybrać typ połączenia komputerów, przez Switch, czy bezpośrednio.
W tym pierwszym przypadku potrzebny jest nam switch, oraz zwykły kabel sieciowy.
Natomiast gdy chcemy bezpośrednio połączyć komputery potrzebny jest nam kabel krosowany

Gdy już połączony komputery, musimy skonfigurować sieć na "PC klient"
Otwieramy "Panel sterowania" ==> "Centrum sieci i udostępnianie" ==> "Zmień ustawiania karty sieciowej" (po lewej) ==> Wybieramy kartę sieciową, klikamy prawym "Właściwości" ==> "Protokół internetowy w wersji 4" ==> "Właściwości" i przypisujemy jak na zdjęciu

Dołączona grafika


Gdzie "Adres IP" to adres komputera
"Maska podsieci" ta, którą wcześniej ustawiliśmy na "Serwer"
"Brama domyślna" IP "Serwer"
Serwery DNS w przykładzie, to serwery Google

Klikamy OK, i zapisujemy.

Zostaje nam jeszcze do stworzenia skrypt, który udostępni internet w sieci lokalnej na "Serwer"

1. Otwieramy plik

nano /etc/init.d/firewall


Wklejamy do niego

#!/bin/sh# wlaczenie w kernelu forwardowania
Echo 1>/proc/sys/net/ipv4/ip_forward
# czyszczenie starych regul
Iptables -F
Iptables -X
Iptables -t nat -X
Iptables -t nat -F
# ustawienie polityki dzialania
Iptables -P INPUT DROP
Iptables -P FORWARD DROP
Iptables -P OUTPUT ACCEPT
# zezwolenie nna laczenie sie z naszym zewnetrznym ip po ssh

Iptables -A INPUT -i lo -j ACCEPT
Iptables -A FORWARD -o lo -j ACCEPT

Iptables -A INPUT -i eth0 -j ACCEPT
Iptables -A FORWARD -o eth0 -j ACCEPT

Iptables -A INPUT -i eth1 -j ACCEPT
Iptables -A FORWARD -o eth1 -j ACCEPT

# polaczenia nawiazane
Iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
Iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
Iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED

# udostepniaie internetu w sieci lokalnej
Iptables -t nat -A POSTROUTING -s 10.0.0.0/24-j MASQUERADE
Iptables -A FORWARD -s 10.0.0.0/24-j ACCEPT


Zapisujemy, oraz dajemy chmod

chmod +x /etc/init.d/firewall


i uruchamiany skrypt

/etc/init.d/firewall


Jeśli chcemy by internet był udostępniany wraz ze startem systemu, wydajemy

update-rc.d firewall defaults 90


Teraz powinniśmy się cieszyć internetem na "PC klient"
Poradnik napisany przez cabana, dla forum.Tweaks.Pl

Konfiguracja sieci

Za pomocą DHCP

Gdy chcemy, by połączenie było aktywne od raz po włączeniu komputera musimy wykonać następujące kroki

Otwieramy plik /etc/network/interfaces

nano /etc/network/interfaces


Dopisujemy na końcu

auto eth0
Iface eth0 inet dhcp


Oczywiście eth0, możemy zastąpić inną kartą sieciową, np. Eth1, wlan0 itp

Wydajemy polecenie

/etc/init.d/networking restart


Teraz IP zostanie pobrane z serwer DHCP routera, oraz będzie to robione przy każdorazowym uruchomieniu komputera

Statyczne IP

Natomiast, gdy chcemy mieć stałe IP komputera w sieci musimy trochę zmodyfikować plik
/etc/network/interfaces

Otwieramy plik /etc/network/interfaces

nano /etc/network/interfaces


Dopisujemy na końcu

auto eth0
Iface eth0 inet static
Address 192.168.1.100
Netmask 255.255.255.0
Gateway 192.168.1.1


Gdzie:

address - IP komputera
netmask - maska podsieci
gateway - brama domyślna

Oczywiście eth0, możemy zastąpić inną kartą sieciową, np. Eth1, wlan0 itp

Wydajemy polecenie

/etc/init.d/networking restart


Teraz IP będzie statyczne dla naszego komputera, i będzie się ustawiało, przy każdorazowym jego włączeniu

DNS

Ustwiamy serwer DNS

Otwieramy plik /etc/resolv.Conf

nano /etc/resolv.conf


Dopisujemy na początku

nameserver 8.8.8.8
Nameserver 8.8.4.4


Spowoduje to, iż system będzie używał tych serwerów DNS
Są to DNS google

Automatyczne montowanie partycji NTFS przy starcie systemu

Pierwsze co, to trzeba zainstalować pakiet ntfs-3g

apt-get install ntfs-3g


Następnie edytujemy plik /etc/fstab

nano /etc/fstab


Dodajemy na jego końcu

/dev/sda1	/media/dysk	ntfs-3g	rw,uid=1000,locale=pl_PL.UTF-8,auto02


Gdzie:

/dev/sda1 to partycja którą chcemy zamontować

/media/dysk katalog w którym montujemy

ntfs to system plików na danej partycji,

uid=1000 oznacza, że użytkownik z tym uidem może przeglądać swobodnie to urządzenie bez posiadania uprawnień roota

rw daje możliwość odczytu i zapisu dla partycji ntfs,

codepage=852,iocharset=iso8859-2 jest to polski system kodowanie znaków; pamiętaj, że możesz tam także wpisać utf-8 jeśli używasz UTF-8,

auto oznacza, że dane urządzenie będzie montowane przy starcie systemu,

0 oznacza, że nie trzeba odłączać systemu plików,

2 oznacza, że system plików danego urządzenia ma być sprawdzany po sprawdzeniu pierwszego urządzenia (1).

Zapisujemy plik, restartujemy komputer i cieszymy się automatycznie zamontowaną partycją NTFS

[poradnik] vhost apache2

Gdy przekierujemy domenę rekordem A w DNS na IP serwera gdzie jet
apache wypadałoby zrobić vhosta żeby nam się ta strona wyświetliła,
polecenia jako root wykonujemy.

Najpierw jako zwykły user musimy utworzyć folder gdzie będzie www, w moim przypadku to /home/cabana/public_html

Wykonujemy:

cd ~/

mkdir public_html


Teraz jako root będziemy wydawać polecenia

nano /etc/apache2/httpd.conf


Wklejamy poniższy kod modyfikując go pod siebie.

Cytat


DocumentRoot "/home/cabana/public_html"
ServerName nazwadomeny.Pl
ErrorLog "/var/log/www-error_log"
CustomLog "/var/log/www-access_log" common

allow from all
AllowOverride All


Zostaje jeszcze tylko restart apache i powinno działać jak wszystko dobrze zrobiliśmy.

/etc/init.d/apache2 restart


Wchodząc na nazwadomeny.Pl powinien apache pobrać pliki z /home/cabana/public_html


Poradnik napisany dla Tweaks.Pl przez cabana

[poradnik]Instalacja Lighttpd i PHP debian

Dziś przedstawię jak zainstalować serwer lighttpd z obsługą PHP na debianie.

Pierwsze co to instalujemy niezbędne pakiety.

apt-get install lighttpd  php5-cgi


Następnie edytujemy plik /etc/php5/cgi/php.Ini i dodajemy na końcu

Cytat

cgi.Fix_pathinfo=1

nano /etc/php5/cgi/php.ini


Włączany obsługę FastCGI

lighttpd-enable-mod fastcgi

ls -l /etc/lighttpd/conf-enabled


Na koniec pliku /etc/lighttpd/lighttpd.Conf dopisujemy

Cytat

nano /etc/lighttpd/lighttpd.Conf


fastcgi.server =(".Php"=>(("bin-path"=>"/usr/bin/php5-cgi","socket"=>"/tmp/php.Socket")))


Teraz już wystarczy restart lighttpd

/etc/init.d/lighttpd restart


Serwer powinien działać

Poradnik napisany dla Tweaks.Pl przez cabana

[poradnik] Vhosty Lighttpd

Wcześniej pisałem jak zainstalować lighttpd z obsługą PHP, dziś przestawię jak tworzyć vhoty.

Pierwsze co to jako zwykły użytkownik tworzymy katalog public_html w swoim katalogu domowy.

cd ~

mkdir public_html


Teraz logujemy się na konto root i dopisujemy na koniec pliku

nano /etc/lighttpd/lighttpd.conf

Cytat

$HTTP["host"] == „twojanazwa.Pl” {
server.Document-root= „/home/nazwauser/public_html”
}


Gdzie ”twojanazwa.Pl” to domena jaką dodajemy, a /home/nazwauser/public_html położenie plików html dla serwera.

Teraz już wystarczy zrestartować serwer i powinno działać.

/etc/init.d/lighttpd restart


Poradnik napisany dla Tweaks.Pl przez cabana


phpDocumentor?

Requirements

phpDocumentor requires the following:

Note: If you do not want to install the Graphviz dependency you are encouraged to generate your own template and make sure that it does not contain anything related to Graph. An easier solution might be to editdata/templates/responsive/template.Xml file and remove every line containing the word Graph but this will be undone with every upgrade of phpDocumentor.

Please see the documentation about creating your own templates for more information.

Installation

There are 3 ways to install phpDocumentor:

  1. Via PEAR (recommended)
  2. Via Composer
  3. Using the PHAR

Please note that it is required that the installation path of phpDocumentor does not contain spaces. This is a requirement imposed by an external library (libxml)

PEAR (recommended)

  1. phpDocumentor is hosted on its own PEAR channel which can be discovered using the following command:

    $ pear channel-discover pear.Phpdoc.Org
    
  2. After that it is a simple matter of invoking PEAR to install the application

    $ pear install phpdoc/phpDocumentor
    

Via Composer

  1. phpDocumentor is available on Packagist.
  2. It can be installed as a dependency of your project by running

    $ composer require-dev phpdocumentor/phpdocumentor
    

Using the PHAR

  1. Download the phar file from http://phpdoc.Org/phpDocumentor.Phar
  2. ???
  3. Profit!

How to use phpDocumentor?

The easiest way to run phpDocumentor is by running the following command:

$ phpdoc run -d  -t 

This command will parse the source code provided using the -d argument and output it to the folder indicated by the -t argument.

phpDocumentor supports a whole range of options to configure the output of your documentation. You can execute the following command, or check our website, for a more detailed listing of available command line options.

$ phpdoc run -h


Download

PDF Word HTML