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?
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
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:
Praca z obrazami ISO
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
Spis treści [ukryj]
- Instalacja i konfiguracja Apache, PHP5, Ruby, Python, CGI, WebDAV Ubuntu/Debian
- 1. Instalacja Apache.
- 2. Instalacja PHP5, Ruby i Python (jako moduły do Apache).
- 3. Edycja /etc/apache2/mods-available/dir.Conf i zmiana DirectoryIndex.
- 4. Włączanie modułów w Apache takich jak: SSL, rewrite, suexec, include i WebDAV.
- 5. Restart Apache:
- 6. Test PHP.
- 7. Włączanie skryptów CGI
- 8. Jeśli masz zamiar zarządzać serwerem za pomocą ISPConfig wykonaj następujące czynności
- 9. Wyłączanie globalnych ustawień PHP
- 10. Tworzenie prywatnych certyfikatów.
- 11. Restart Apache:
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
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
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
1 |
|
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=1Naprawa 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:
Identyfikator dysku: 0x000d5aaf
Urządzenie Rozruch Początek Koniec Bloków ID System
W powyższym przypadku partycja swap to /dev/sda4. Teraz sprawdzamy jej UUID:
Następnie edytujemy /etc/fstab naszym ulubionym edytorem:
powinniśmy uzyskać coś takiego:
Naprawa hibernacji
Zasadnicza naprawa hibernacji sprowadza się do edycji jednego pliku /etc/initramfs-tools/conf.D/resume:
plik ten powinien wyglądać następująco:
Na koniec aktualizujemy iniramfs:
Naprawa hibernacji zakończona.
Sytuacja wygląda następująco, otóż są dwa komputery:
- Komputer z Windows do którego podpięta jest drukarka i ta drukarka została udostępniona
- 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ć:
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
Klikamy Przeglądaj, otworzy nam się Przeglądarka SMB, gdzie wyszykujemy naszą udostępnioną drukarkę:
Przeglądarka SMB
Teraz pozostaje zainstalować sterowniki drukarki:
Wybór sterownika
W zależności od sterownika możemy też wybrać dodatkowe opcje instalacyjne.
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:
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ę:
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:
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:
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):
Ochrona przed atakami
Do pełni szczęścia brakuje nam jeszcze tylko ochrony przed skanowaniem portów:
oraz przed atakiem SYN flood (denial-of-service):
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
23
45
67
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
5455
5657
5859
6061
6263
6465
66 | #!/bin/bash # czyścimy wszystko iptables-F iptables-X
iptables-F-tnatiptables-X-tnat
iptables-F-tfilteriptables-X-tfilter if["$1"="stop"]
theniptables-PINPUT ACCEPT
iptables-PFORWARD ACCEPTiptables-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-jRETURNiptables-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
zapisujemy go, a następnie wykonujemy:
co sprawi, że nasz firewall będzie uruchamiał się od razu po inicjalizacji kernela, ponadto od tej chwili możemy zatrzymać firewalla komendą:
i powtórnie uruchomić komendą:
natomiast sprawdzić stan firewalla możemy komendą:
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
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
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
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:
Country Name(2letter code)[AU]:PL
PHP
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
MySQL i 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
To tyle aby LAMP zadziałał, ale pole do zmian konfiguracji jest duże.
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 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
vps część 5
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
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
Contents |
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:
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.
- A wireless network adapter
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
Instalacja i konfiguracja Apache, PHP5, Ruby, Python, CGI, WebDAV Ubuntu/Debian
Spis treści [ukryj]
- Instalacja i konfiguracja Apache, PHP5, Ruby, Python, CGI, WebDAV Ubuntu/Debian
- 1. Instalacja Apache.
- 2. Instalacja PHP5, Ruby i Python (jako moduły do Apache).
- 3. Edycja /etc/apache2/mods-available/dir.Conf i zmiana DirectoryIndex.
- 4. Włączanie modułów w Apache takich jak: SSL, rewrite, suexec, include i WebDAV.
- 5. Restart Apache:
- 6. Test PHP.
- 7. Włączanie skryptów CGI
- 8. Jeśli masz zamiar zarządzać serwerem za pomocą ISPConfig wykonaj następujące czynności
- 9. Wyłączanie globalnych ustawień PHP
- 10. Tworzenie prywatnych certyfikatów.
- 11. Restart Apache:
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-cert2. 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 sslsudo a2enmod rewrite
sudo a2enmod suexec
sudo a2enmod include
sudo a2enmod dav_fs
sudo a2enmod dav
5. Restart Apache:
sudo /etc/init.D/apache2 restartTestujemy 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.PhpZmieniamy uprawnienia do pliku index.Php
sudo chmod 755 /var/www/index.PhpRestart Apache2.
sudo /etc/init.D/apache2 restarti testujemy w przeglądarce:
http://127.0.0.1/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.CgiRestart Apache
sudo /etc/init.D/apache2 restarti testujemy w przeglądarce
http://127.0.0.1/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.
.......................++++++
.......++++++
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łowriting 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
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:
- MTA - serwer pocztowy (Postfix, Qmail...),
- Serwer baz danych - MySQL - (tutorial),
- Serwer WWW - Apache 2.
Przykładowa konfiguracja.
RoundCube Serwer WWW
- www.Serwer.PolSerwer 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.
* 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):
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
Spis treści [ukryj]
- Postfix + SASL + TLS (SMTP-AUTH) Debian/Ubuntu
- Instalacja i konfiguracja SASL.
- Konfiguracja SASL.
- Tworzenie pliku konfiguracyjnego smtp.Conf.
- Dodanie użytkownika sasl.
- Uruchamiamy SASL.
- Edytujemy plik konfiguracyjny postfixa /etc/postfix/main.Cf i dodajemy następujące parametry:
- Restartujemy postfixa:
- „Instalacja” TLS
- Generacja kluczy TLS (na około 10 lat)
- Konfiguracja klientów
Postfix + SASL + TLS (SMTP-AUTH) Debian/Ubuntu
Instalacja i konfiguracja SASL.
sudo apt-get install libsasl2 sasl2-bin libsasl2-modules postfix-tlsKonfiguracja SASL.
Edycja pliku konfiguracyjnego /etc/default/saslauthd.
sudo nano /etc/default/saslauthdSTART=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 saslUruchamiamy SASL.
/etc/init.D/saslauthd startTestujemy Działanie programu.
testsaslauthd -u użytkownik -p hasło -f /var/spool/postfix/var/run/saslauthd/muxMoż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.Cfsmtp_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
Spis treści
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 -pKonfiguracja 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.
#bind-address = 127.0.0.1
Restart serwera MySQL.
sudo /etc/init.D/mysql restartTest nasłuchiwania serwera MySQL.
sudo netstat -tap | grep mysqltcp 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.SqlPrzykład archiwizacji określonych tabel bazy danych „JAKAS_BAZA_DANYCH”:
tabele np:
- php_cms
- aps_cms
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
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.
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:
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:
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.
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,
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_DANYCHUsuwanie bazy danych:
mysql> drop database NAZWA_BAZY_DANYCH;Naprawa bazy danych:
Przykład bazy danych - wordpress.
Tabela bazy danych - wordpress.Wp_posts
Sprawdzanie bazy danych.
Naprawa Bazy danych.
Ponowne sprawdzanie bazy danych.
lub
Przykład bazy danych - wordpress.
Sprawdzanie bazy danych:
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-repairwordpress.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
Spis treści [ukryj]
Numeracja masek podsieci
Skróconamaska 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.
Spis treści [ukryj]
- Instalacja własnej chmury - OwnCloud.
Testowane:
Debian 6.0.X, Debian 7.X.X, Apache2, (2.2.22), PHP5, (5.4.4), Mysql 5.5.31Aby uruchomić własny serwer Cloud - OwnCloud, musimy mięć zainstalowane odpowiednie pakiety:
- Apache2: Instalacja i konfiguracja Apache, PHP5, Ruby, Python, CGI, WebDAV Ubuntu/Debian.
- Serwer MySQL: MySQL - instalacja i konfiguracja - Debian 6.
- php5 (>= 5.3),
- php5-json,
- php-xm,
- php-mbstring,
- php5-zip,
- php5-gd.
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-parser2. 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 |
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 |
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 |
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 |
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 |
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.
Przechodzimy pod adres uruchamiając skrypt instalacyjny:
- http://localhost/setup-owncloud.Php,
- http://adres_IP/setup-owncloud.Php,
- http://domena.Pl/setup-owncloud.Php.
Powinien pojawić się instalator, który automatycznie sprawdzi zależności i pobierze najnowszą wersję Owncloud.
Klikamy na Next.
Jeśli instalator nie znalazł żadnych nieprawidłowości wypełniamy pole Install in subdirectory (podfolder).
np: owncloud.
Klikamy Next.
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.
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.Bz2Dostę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:
... 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:
...
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 restart5. 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.
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.
2. Konfiguracja Zaawansowana.
Edycja pliku /var/www/owncloud/config/config.Php.
sudo nano /var/www/owncloud/config/config.Phptrue, "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', ); ?>
Źródło:
http://owncloud.Org/Analiza wydajności w Linuksie programem kSar
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność w Linuksie
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:
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
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność w Linuksie
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
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
- Informacje o traceroute w Linuksie: Analiza sieci w Linuksie z traceroute
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
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność w Linuksie
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
- ↑ dbench README, dział realistic load? na końcu pliku
- ↑ vide "man dbench"
- ↑ http://www.Heise.De/open/Das-Dateisystem-Ext3-tunen--/artikel/104859
- ↑ http://samba.Org/ftp/tridge/dbench/
- ↑ http://www.Areca.Com.Tw/products/pcie.Htm
Dalsze informacje
Pomiar obciążenia CPU z mpstat w Linuksie
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność 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]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
- ↑ 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
- ↑ Linux 2.6. – 32 Per-backing-device based writeback (kernelnewbies.Org)
- ↑ Clearing The Linux Buffer Cache (blog.Straylightrun.Net, 03.12.2009)
- ↑ Improving Linux performance by preserving Buffer Cache State (insights.Oetiker.Ch)
Dalsze informacje
- Page Cache, the Affair Between Memory and Files (Blog)
- Linux buffer cache state (Blog)
- The Linux Page Cache and pdflush: Theory of Operation and Tuning for Write-Heavy Loads (Last update 8/08/2007)
- drop_caches (linuxinsight.Com)
- Examining Linux 2.6 Page-Cache Performance (linuxinsight.Com)
- Page cache (en.Wikipedia.Org)
Pomiar wydajności z vmstat w Linuksie
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność 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
Pomiar wydajności z iostat w Linuksie
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność 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
Tuning wydajności MySQL
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność w Linuksie
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
- MySQL Enterprise Monitor von MySQL (komercyjny), http://www.Mysql.De/products/enterprise/monitor.Html (j. Niemiecki)
- Kontrollbase, http://kontrollsoft.Com/software-kontrollbase
- Nagios Plugins, vide Monitoringexchange i Nagios Exchange
- Cacti Mysql Templates, http://code.Google.Com/p/mysql-cacti-templates/
Przykład wykresu analizy Mysql Cacti:
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
Rejestracja i analiza wydajności w Linuksie programem sar
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność w Linuksie
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::
- sarface (vide http://sourceforge.Net/projects/sarface/)
- kSar
- dalsze narzędzia vide Sysstat FAQs pytanie 2.11. Do you know a tool which can graphically plot the data collected by sar?
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
- ↑ 9133: S.M.A.R.T. Attribute: Current Pending Sector Count (Acronis Knowledge Base)
- ↑ S.M.A.R.T. (en.Wikipedia.Org)
- ↑ 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]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
- ↑ SambaClientGuide (help.Ubuntu.Com)
Dalsze informacje
- http://www.Samba.Org/cifs/
- Samba Client cifs (wiki.Ubuntuusers.De)
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:
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)
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.
Dalsze informacje
Ogólne informacje (j. Niemiecki)
- Erkärung der Unterschiede zwischen Portbasierten VLANs und Tagged VLANs:
- Einführung in VLANs, Teil 1:
- Netze schützen mit VLANs (heise Verlag):
- Paket-Pipeline: Netzsegmentierung per VLAN (c't 24/2010, künftig unter http://www.Heise.De/kiosk/archiv/ct/2010/24/176 abrufbar)
Informacje specyficzne dla VMware
- Creating & Using Virtual Networks
- VMware Virtual Networking Concepts (bezieht sich noch auf Version VI3, gilt aber großteils auch für vSphere 4):
- What's New in VMware vSphere™ 4: Virtual Networking:
- VMware Networking Best Practices:
Informacje specyficzne dla Linuksa
- http://kbase.Redhat.Com/faq/docs/DOC-22959?Sc_cid=70160000000II0zAAG (Red Hat Enterprise Virtualization: Bonding, VLAN-tagging and Logical Networks - what are the supported networking layouts?)
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.
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
Finally, load the module
sudo modprobe ath_pci
3. Sources
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
Strona_główna > Oprogramowanie serwerowe > Linux > Wydajność w Linuksie
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
Sytuacja wyjściowa wygląda następująco:
- 2 HDD
- RAID1 dla OS i swapu
- 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:
- partycjonowanie dysków dla OS i swapu (każdy na własnej partycji)
- konfiguracja macierzy RAID1 z właśnie utworzonymi partycjami
- utworzenie systemu plików (ext4) dla OS i skonfigurowanie obszaru swap
- partycjonowanie dysków dla danych użytkowników
- konfiguracja macierzy RAID5 dla danych użytkowników
- utworzenie grupy woluminów z RAID-Device (vide Podstawowe informacje o LVM)
- utworzenie logicznego woluminu
- 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.
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.
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.
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.
sudo: add-apt-repository: command not found on Ubuntu 12.04
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
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 LTSSpecyfikacja 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-swapInstalację 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'73wget https://dl.Dropboxusercontent.Com/u/2552069/ext73/instalator_NeteXt73; bash instalator_NeteXt73W 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 |
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.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.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):
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:
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
Klient IRC: Irssi
Edytor tekstu: nano
Alsamixer
mp3blaster - Odtwarzacz mp3.
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.
"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
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:
- PHP 5.3.3 or higher
- ext/iconv, http://php.Net/manual/en/book.Iconv.Php (is enabled by default since PHP 5.0.0)
- ext/intl, http://php.Net/manual/en/book.Intl.Php
- The XSL extension, http://www.Php.Net/manual/en/book.Xsl.Php (optional, only used with XSL based templates)
- Graphviz (optional, used for generating Class diagrams)
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:
- Via PEAR (recommended)
- Via Composer
- 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)
phpDocumentor is hosted on its own PEAR channel which can be discovered using the following command:
$ pear channel-discover pear.Phpdoc.OrgAfter that it is a simple matter of invoking PEAR to install the application
$ pear install phpdoc/phpDocumentor
Via Composer
- phpDocumentor is available on Packagist.
It can be installed as a dependency of your project by running
$ composer require-dev phpdocumentor/phpdocumentor
Using the PHAR
- Download the phar file from http://phpdoc.Org/phpDocumentor.Phar
- ???
- 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