niedziela, 21 lutego 2010

Testowanie czy STDOUT jest terminalem w skrypcie shell (BASH)

 Po wydaniu tego polecenia:

DEBUGME=0 && [ $(stat -c "%t" -L "/proc/$$/fd/1") -eq 88 ] && DEBUGME=1
Zmienna DEBUG będzie miła wartość 1 gdy skrypt zostanie uruchomiony z terminala (interaktywny).
Przydatna może być też taka funkcja:

function debugme() {
        if [ "0$DEBUGME" -eq 1 ]
        then
                echo $*
        fi
}

środa, 17 lutego 2010

nCipher nShield F3 i OpenSSL

Generacja klucza:
/opt/nfast/bin/generatekey hwcrhk protect=module type=RSA size=2048 pubexp= ident=klucztestowy nvram=NO

Lista kluczy:
/opt/nfast/bin/nfkminfo -l

OpenSSL
Klucz publiczny:
/opt/nfast/bin/openssl rsa -engine chil -inform engine -in klucztestowy -text -pubout

Zapisanie klucza publicznego do pliku:
/opt/nfast/bin/openssl rsa -engine chil -inform engine -in klucztestowy  -pubout -out klucztestowy.pub

Generacja CSR:
/opt/nfast/bin/openssl req -engine chil -keyform engine -new -key klucztestowy -subj '/C=PL/ST=MAZ/L=Warszawa/O=RobiNET/OU=IT/CN=TESTOWY' -out klucztestowy.req

Wyświetlenie CSR:
/opt/nfast/bin/openssl req -in klucztestowy.req -text -noout

Generacja cerrtyfikatu self-signed:
/opt/nfast/bin/openssl req -engine chil -keyform engine -new -key klucztestowy -x509 -days 365  -subj '/C=PL/ST=MAZ/L=Warszawa/O=RobiNET/OU=IT/CN=TESTOWY' -out klucztestowy.pem

s_server:
/opt/nfast/bin/openssl s_server -engine chil -keyform engine -key klucztestowy -cert klucztestowy.pem -www -accept 8443

Testy (HSM)
/opt/nfast/bin/openssl s_time -connect localhost:8443 -new

1483 connections in 5.99s; 247.58 connections/user sec, bytes read
Średnie obciążenie procesora podczas testu: ~15% (~7% przy testowaniu z zdalnego hosta)

Bez HSM:
1259 connections in 5.27s; 238.90 connections/user sec, bytes read 0
Średnie obciążenie procesora podczas testu: ~52% (~42% przy testowaniu z zdalnego hosta)

Inne przykłady wykorzystania linii poleceń OpenSSL: http://www.madboa.com/geek/openssl/

wtorek, 16 lutego 2010

Pseudo benchmark HSM (nCipher 500 PCIe)

Pseudo benchmark HSM (nCipher 500 PCIe)

System z Intel Pentium 4 CPU 3.00GHz

Polecenie (CPU):
openssl speed rsa
RSAsignverifysign/sverify/s
rsa 512 bits0.000677s0.000051s1477.3 19462.4
rsa 1024 bits0.003147s0.000142s317.8 7062.2
rsa 2048 bits0.017435s0.000429s57.4 2328.9
rsa 4096 bits0.106277s0.001689s9.4 592.2

Polecenie (HSM):
openssl speed -engine chil rsa
RSAsignverifysign/sverify/s
rsa 512 bits0.000087s 0.000037s11525.727097.1
rsa 1024 bits0.000155s 0.000068s6447.514763.2
rsa 2048 bits0.000445s 0.000053s2245.218700.0
rsa 4096 bits0.001056s 0.000109s947.19133.3

Dla porównania
System z 2 x Intel Xeon CPU E5420 2.50GHz

Polecenie:
openssl speed rsa
RSAsignverifysign/sverify/s
rsa 512 bits0.000132s0.000012s7558.981851.8
rsa 1024 bits0.000638s0.000035s1568.328960.8
rsa 2048 bits0.003926s0.000120s254.78304.8
rsa 4096 bits0.027527s0.000436s36.32291.1

Polecenie:
openssl speed rsa -multi 8
RSAsignverifysign/sverify/s
rsa 512 bits0.000017s0.000002s58421.6625274.7
rsa 1024 bits0.000083s0.000004s12005.9224024.4
rsa 2048 bits0.000515s0.000016s1943.461603.9
rsa 4096 bits0.003482s0.000055s287.218018.7

Instalcja zdalna systemu CentOS/RedHat

Konfiguracja grub-a:

Dla VNC

   title Centos Install (VNC)
   root (hd0,0)
   kernel /boot/vnc/vmlinuz vnc vncpassword=YOURPSW headless ip=YOURIP netmask=X.X.X.X gateway=GATEWAYIP dns=X.X.X.X ksdevice=eth0 method=http://ftp.icm.edu.pl/pub/linux/distributions/centos/5.4/os/i386/ lang=en_US keymap=us
   initrd /boot/vnc/initrd.img

VNC "call-back":

   title Centos Install (VNC)
   root (hd0,0)
   kernel /boot/vnc/vmlinuz vnc vncconnect=X.X.X.X:PORT headless ip=YOURIP netmask=X.X.X.X gateway=GATEWAYIP dns=X.X.X.X  ksdevice=eth0 method=http://ftp.icm.edu.pl/pub/linux/distributions/centos/5.4/os/i386/ lang=en_US keymap=us
   initrd /boot/vnc/initrd.img

Inne przydatne opcję:
  
   ip=dhcp
   noipv6
   nodmraid

Adres VNC: YOURIP:1 (port tcp 5901)

Dla Kickstart:

title Centos Install (KS)
   root (hd0,0)
   kernel /boot/ks/vmlinuz headless ip=YOURIP netmask=X.X.X.X gateway=GATEWAYIP dns=X.X.X.X ksdevice=eth0 ks=http://server_url/custom.ks
   initrd /boot/ks/initrd.img

Instalacja zdalna w OVH: http://evcz.tk/blog/2008/10/21/remote-centos-install/

FTP - active-passive

  FTP Active           Serwer(20) -> Klient(N=PORT)
  FTP Passive         Klient(N) -> Serwer (N)

Optymalizacja odtwarzania bazy z backupu dla wersji PostgreSQL 8.3.x

W celu przyspieszenia odtwarzania bazy dany przydane są następujące zmiany w pliki konfiguracyjnym postgresql.conf:

    maintenance_work_mem = 512MB
    fsync = off
    checkpoint_segments = 30
    full_page_writes = off
    wal_buffers = 16M
    autovacuum = off


Zmiana tych dwóch parametrów przyspiesza znacząco odtwarzanie bazy. Przeprowadzone testy na jednej z baz produkcyjnych pokazały ponad czterokrotne przyspieszenie w stosunku do konfiguracji domyślnej.

Dokumentacja na tematy tych parametrów:
   http://www.postgresql.org/docs/8.3/interactive/runtime-config-wal.html
   http://www.postgresql.org/docs/8.3/interactive/populate.html
   http://www.postgresql.org/docs/8.3/interactive/runtime-config-resource.html

Reset hasła w MySQL

Procedura resetowania hasłą użytkownika root w bazie MySQL

1. Zatrzymaj serwer MySQL
2. Uruchom serwer z opcją --skip-grant-tables
3. Połącz się z serwerem za pomocą klienta mysql z opcją –u root
4. Wykonaj polecenie SQL: UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
5. Wykonaj polecenie: FLUSH PRIVILEGES;

Źródło: http://www.tech-faq.com/reset-mysql-password.sht

cyradm/sieveshell i readline

Bardzo wygodna funkcjonalność związane z obsługją biblioteki readline w narzędziach lini poleceń:
   cyradm i sieveshell
może być dodanę przez instalację modułu: perl-Term-ReadLine-Gnu

Aktualizacja kluczy publicznych w Debianie

Aktualizacja kluczy publicznych w Debianie

1)
   apt-key update

2)
   apt-get install debian-keyring debian-archive-keyring

3)
   gpg --keyserver subkeys.pgp.net --recv-keys XXXXXXXXX
   gpg --armor --export XXXXXXXXX | apt-key add -

Slony-I Replikacja - ściąga

 Slony-I szybka ściąga:

1) Instalacja Slony-I na serwerach
2) Tworzenie klastra:

   ./slonik <<
      cluster name = slony_cms;
      node 1 admin conninfo = 'dbname=cms host=10.0.0.1 user=postgres';
      node 2 admin conninfo = 'dbname=cms host=10.0.0.2 user=postgres';
      init cluster (id=1,comment='Master');
      store node (id=2,comment='Slave');
      store path (client=1,server=2,conninfo = 'dbname=cms host=10.0.0.1 user=postgres');
      store path (client=2,server=1,conninfo = 'dbname=cms host=10.0.0.2 user=postgres');
   EOF

3) Uruchomienie procesu replikacji:
  
   Serwer A:
      ./slon -d1 slony_cms 'dbname=cms host=10.0.0.1 user=postgres'

   Server B:
      ./slon -d1 slony_cms 'dbname=cms host=10.0.0.2 user=postgres'

4) Subskrypcja:

   ./slonik
<<
      cluster name = slony_cms;
      node 1 admin conninfo = 'dbname=cms host=10.0.0.1 user=postgres';
      node 2 admin conninfo = 'dbname=cms host=10.0.0.2 user=postgres';

      create set (id=1, origin=1, comment='Replikacja');
      set add sequence (id=1,set id=1, origin=1,fully qualified name = 'public.tabela_a_id_seq');
      set add sequence (id=1,set id=1, origin=2,fully qualified name = 'public.tabela_b_id_seq');
      ...
      set add table (id=1,set id=1, origin=1,fully qualified name = 'public.tabela_a');
      set add table (id=2,set id=1, origin=1,fully qualified name = 'public.tabela_b');
      ...
      subscribe set ( id = 1, provider = 1, receiver = 2, forward = no);
   EOF

   WAŻNE: Tabele muszą posiadać klucz główny

I to w sumie tyle. Schematy replikacji można usunąć w ten sposób:

      drop schema _slony_cms cascade;



Skrypt startowy dla Slonego (do wykorzystania z Runtime) pobierz

Podświetlanie składni w edytorze Vim

Domyślny sposób podświetlania składni w Vim-ie nie spisuję się za dobrze przy korzystaniu z Putty-ego. Ciemny niebieski kolor jest prawie niewidoczny na czarnym tle. Można to poprawić dopisując do pliku ~/.vimrc lub /etc/vimrc (centos) | /etc/vim/vimrc (debian) następujący wpis:

syntax on
set background=dark

Tutaj to znalazłem

BEEP...

Aby się tego pozbyć:
echo 'set bell-style none' >> ~/.inputrc

Wersja BIND


dig @nameserver version.bind txt chaos

nslookup -type=txt -class=chaos version.bind nameserver

Publiczne resolvery DNS

Lista publicznych resolver-ów DNS:


cache1.dnsresolvers.com 205.210.42.205 Kanada
cache2.dnsresolvers.com 64.68.200.200 Kanada
cache3.dnsresolvers.com 66.207.199.44 -
resolver1.opendns.com 208.67.222.222 USA
noc.arpa.org 63.82.223.180 -
- 4.2.2.1 -
cns1.atman.pl 217.17.34.10 POLSKA
cns2.atman.pl 217.17.34.68 POLSKA
google-public-dns-a.google.com 8.8.8.8
google-public-dns-b.google.com 8.8.4.4
Tylko dla klientów TPSA
dns.tpsa.pl 194.204.159.1 POLSKA
dns2.tpsa.pl 194.204.152.34 POLSKA

czwartek, 4 lutego 2010

PostgreSQL - problemy z TOAST

Natrafiłem ostatnio na problem przy wykonywaniu kopii bazy danych. Problem objawiał się takim komunikatem:
pg_dump: dumping contents of table tabela_dane
pg_dump: ERROR:  unexpected chunk number 65 (expected 63) for toast value 12313674
pg_dump: lost synchronization with server, resetting connection
pg_dump: SQL command to dump the contents of table "tabela_dane" failed: PQendcopy() failed.

Oto pomocne zapytania SQL, które pomogły w dokładniejszej identyfikacji problemu:

select relname from pg_class where oid = (select reltoastrelid from pg_class where relname ='tbela_dane');
select chunk_seq,length(chunk_data) from pg_toast.pg_toast_NNNNN where chunk_id = 12313674
Na szczęście tej bazie (ponad 50GB), znajdował się jeden uszkodzony wiersz i w w nim kolumna (w powiązanej z tablą tabeli TOAST) . Usunięcie danych z tej kolumny i przywrócenie ich z backup-u rozwiązało problem.