wtorek, 7 grudnia 2010

kexec w CentOS

Kexec to przydatna funkcja kernela Linuxa umożliwiająca uruchomienie innego jądra systemu z aktualnie uruchomionego systemu. Dzięki jej wykorzystaniu możemy podmienić działające jądro z pominięciem procedury BIOS serwera (która może trochę trwać na co niektórych konfiguracjach).

Wymagane pakiety:
yum install kexec-tools
Wykorzystanie kexec:
# Załadowanie nowego jądra
kexec -l /boot/vmlinuz-2.6.18-238.19.1.el5 --initrd=/boot/initrd-2.6.18-238.19.1.el5.img --append="$(cat /proc/cmdline)"
# Załadowanie nowego jądra (poziom 6 init - reboot)
telinit 6
Na serwerach dedykowanych home.pl warto użyć tej składni w celu uniknięcia odcięcia od konsoli systemowej:
kexec -l /boot/vmlinuz-2.6.18-238.19.1.el5.el5 --initrd=/boot/initrd-2.6.18-238.19.1.el5.img --append="$(cat /proc/cmdline)" --console-serial --serial=ttyS0 --serial-baud=115200

piątek, 3 grudnia 2010

Własne medium instalacyjne z CentOS 5.x

Instrukcja przedstawia przygotowanie własnego repozytorium instalacyjnego z zaktualizowanymi pakietami RPM. Ponadto przedstawione są kroki wymagane do przygotowanie minimalnej  płyty instalacyjnej CD. Instrukcja przygotowana i testowana pod CentOS 5.6 x86_64.

Przygotowanie środowiska
# Wymagane pakiety:
yum install createrepo yum-utils mkisofs
# Struktura katalogów roboczych:
mkdir -p /storage/centos/{i386,x86_64}/{media,work}
mkdir -p /storage/centos/updates
Pobranie plików instalacyjnych
# Pobranie plików instalacyjnych dla architektury i386
lftp -e 'lcd /storage/centos/i386/media && open http://download.hetzner.de/mirrors/centos/5.6/i386/ && mirror &&  get .treeinfo && get .discinfo && quit'

# Pobranie plików instalacyjnych dla architektury x86_64

lftp -e 'lcd /storage/centos/x86_64/media && open http://download.hetzner.de/mirrors/centos/5.6/x86_64/ && mirror &&  get .treeinfo && get .discinfo && quit'

Polski mirror:
http://ftp.icm.edu.pl/pub/linux/distributions/centos/5.6/os/i386/
http://ftp.icm.edu.pl/pub/linux/distributions/centos/5.6/os/x86_64/

Pliki można też oczywiście przekopiować z lokalnego nośnika instalacyjnego.
Pobranie aktualizacji
Przygotowanie pliku konfiguracyjnego dla repozytorium z aktualizacjami:
cat >/etc/yum.repos.d/CentOS-Custom-Update.repo <<EOF
[updates32]
name=CentOS-\$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=5.6&arch=i386&repo=updates
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgcheck=1

[updates64]
name=CentOS-\$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=5.6&arch=x86_64&repo=updates
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgcheck=1
EOF


# Dla i386

reposync -p /storage/centos/updates -n -r updates32
# Dla x86_64
reposync -p /storage/centos/updates -n -r updates64
Przygotowanie kopii roboczej plików instalacyjnych
Ta procedura nie jest doskonała więc lepiej operować na kopii plików instalacyjnych :)

# Dla i386
rsync -av /storage/centos/i386/media/  /storage/centos/i386/work/
# Dla x86_64
rsync -av /storage/centos/x86_64/media/  /storage/centos/x86_64/work/
Aktualizacja pakietów  instalacyjnych
Utworzenie repozytorium dla updates32 i updates64:

createrepo /storage/centos/updates/updates32/
createrepo /storage/centos/updates/updates64/

Następnie należy przekopiować zaktualizowane/dodane pakiety z repozytorium aktualizacji do repozytorium instalacyjnego. Można to zrobić ręcznie lub za pomocą narzędzia custom-repo-integrate. Jest zmodyfikowana wersja programu repodiff.

# Dla i386
custom-repo-integrate -a i386 -u file:///storage/centos/updates/updates32/ -b file:///storage/centos/i386/work/
custom-repo-integrate -a i686 -u file:///storage/centos/updates/updates32/ -b file:///storage/centos/i386/work/
custom-repo-integrate -a noarch -u file:///storage/centos/updates/updates32/ -b file:///storage/centos/i386/work/


# Dla x86_64
custom-repo-integrate -a x86_64 -u file:///storage/centos/updates/updates64/ -b file:///storage/centos/x86_64/work/
custom-repo-integrate -a noarch -u file:///storage/centos/updates/updates64/ -b file:///storage/centos/x86_64/work/
custom-repo-integrate -a i386 -u file:///storage/centos/updates/updates64/ -b file:///storage/centos/x86_64/work/
custom-repo-integrate -a i686 -u file:///storage/centos/updates/updates64/ -b file:///storage/centos/x86_64/work/


W kolejnym kroku należy odświeżyć repozytoria instalacyjne z uwzględnieniem pliku comps.xml:

# Dla i386
createrepo -g /storage/centos/i386/work/repodata/comps.xml /storage/centos/i386/work

# Dla x86_64
createrepo -g /storage/centos/x86_64/work/repodata/comps.xml /storage/centos/x86_64/work

Dodatkowo można sprawdzić integralność repozytoriów (zależności):

# Dla i386
repoclosure -a i386 -a i686 -a noarch -r it.socha.install32 --repofrompath=it.socha.install32,/storage/centos/i386/work
# Dla x86_64
repoclosure -a x86_64 -a i386 -a i686 -a noarch -r it.socha.install64 --repofrompath=it.socha.install64,/storage/centos/x86_64/work
Repozytorium do instalacji sieciowej jest gotowe do użytku. Pozostało tylko przygotowanie plików kickstart.
Przykładowe pliki konfiguracyjne kickstart:
  • simple.ks - instalacja minimalnego systemu z dostępnym ekranem partycjonowania i konfiguracji GRUB
  • 1disc.ks - instalacja automatyczna na dysku /dev/sda (LVM)
  • 2disc.ks - instalacja automatyczna na dwóch dyskach z RAID1 i LVM


Dalsza cześć to opis przygotowania minimalnej płyty instalacyjnej CD.

Jeśli chcemy przygotować minimalną płytę instalacyjną (plik ISO) należy z katalogu instalacyjnego (CentOS) wybrać tylko wymagane pakiety (lista pakietów  minimalcentos.txt). Przygotowałem prosty skrypt, który z wskazanego katalogu instalacyjnego skopiuje wymagane pakiety. Skrypt nazywa się simple-rpm-copy. Cała procedura przygotowania płyty:
# Katalog roboczy
mkdir -p /storage/centos/{i386,x86_64}/mini/CentOS


# Kopiowanie repozytorium instalacyjnego z pominięciem katalogu CentOS
# Dla i386
rsync -av --exclude=CentOS /storage/centos/i386/work/ /storage/centos/i386/mini/
# Dla x86_64
rsync -av --exclude=CentOS /storage/centos/x86_64/work/ /storage/centos/x86_64/mini/

# Pobranie skryptu simple-rpm-copy
wget http://bit.ly/eTseVD -q -O /storage/centos/simple-rpm-copy && chmod +x /storage/centos/simple-rpm-copy

# Kopiowanie wymaganych RPM do mini instalacji

# Dla i386
wget http://bit.ly/e6am3x -q -O - | /storage/centos/simple-rpm-copy /storage/centos/i386/mini/CentOS/ /storage/centos/i386/work/ i386,i686,noarch
# Dla x86_64
wget http://bit.ly/e6am3x  -q -O - | /storage/centos/simple-rpm-copy /storage/centos/x86_64/mini/CentOS/ /storage/centos/x86_64/work x86_64,noarch

# Zaktualizowanie repozytorium
# Dla i386
createrepo -g /storage/centos/i386/mini/repodata/comps.xml /storage/centos/i386/mini/
# Dla x86_64
createrepo -g /storage/centos/x86_64/mini/repodata/comps.xml /storage/centos/x86_64/mini/

Dodatkowo warto sprawdzić integralność repozytoriów (zależności):

# Dla i386
repoclosure -a i386 -a i686 -a noarch -r it.socha.mini32 --repofrompath=it.socha.mini32,/storage/centos/i386/mini
# Dla x86_64
repoclosure -a x86_64 -a i386 -a i686 -a noarch -r it.socha.mini64 --repofrompath=it.socha.mini64,/storage/centos/x86_64/mini


Na płycie można również zapisać pliki kickstart i lekko zmodyfikowany plik konfiguracyjny bootloadera isolinux (archiwum centos.tar.gz)

# Dla i386
wget http://bit.ly/hzo1rA -q -O - | tar xzf - -C /storage/centos/i386/mini
# Dla x86_64
wget http://bit.ly/hzo1rA -q -O - | tar xzf - -C /storage/centos/x86_64/mini
Pozostaje tylko przygotowanie pliku ISO
# Dla i386
mkisofs -v -r -N -L -d -D -J -V CENTOS -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -x lost+found  -o /storage/centos/output/centos-custom-55-i386.iso /storage/centos/i386/mini# Dla x86_64
mkisofs -v -r -N -L -d -D -J -V CENTOS -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -x lost+found  -o /storage/centos/output/centos-custom-55-x86_64.iso /storage/centos/x86_64/mini
Przygotowane obrazy mini płyt instalacyjnych: x86_64 i i386

wtorek, 23 marca 2010

Aktywacja SSL w GlassFish v3

Import klucza i certyfikatu SSL do keystora:


Certyfikat i klucz powinny być w formacie PEM


1) Konwersja certyfikatu do formatu PEM (jeśli wymagana)


    openssl x509 -in server.cer -out server.pem -inform DER -outform PEM


2) Konwersja klucza prywatnego do formatu PEM (jeśli wymagana)


    openssl rsa -in server.der -out server.key -inform DER -outform PEM


2) Utworzenie pliku PKCS12 z kluczem i certyfikatem


   openssl pkcs12 -export -in server.pem -inkey server.key -name "example.com" -out example.p12


     Jako hasło eksportu należy podać hasło: changeit


3) Utworzenie pliku keystore                      


     keytool -importkeystore -v -srckeystore example.p12 -destkeystore keystore  \

     -srcstoretype PKCS12  -alias example.com --deststorepass changeit -srcstorepass changeit


4) Dołączenie pliku keystore do serwera glassfish


    keytool -importkeystore -v -srckeystore keystore \

    -destkeystore ~/glassfish/domains/domain1/config/keystore.jks -alias example.com \

    -deststorepass changeit -srcstorepass changeit


Konfiguracja Glashfish


Aktywacja SSL:


W przykładzie wykorzystany jest port 443 (może być dowolny inny)


~glassfishv3/bin/asadmin create-http-listener --listeneraddress 0.0.0.0 --listenerport 443 --default-virtual-server server --securityenabled=true https-listener

~glassfishv3/bin/asadmin create-ssl --certname example.com --type http-listener --clientauthenabled=false https-listener

~glassfishv3/bin/asadmin stop-domain

~glassfishv3/bin/asadmin start-domain

wtorek, 9 marca 2010

Źródło wiadomości w programie Outlook 2003/2007

Aplikacja Outlook nie udostępnia źródła wiadomości pocztowych (nagłówków i treści). Po odebraniu wiadomości program zapisuję wiadomość w formacie wewnętrznym. Dostęp do samych nagłówków jest możliwy po wybraniu polecenia "Opcje wiadomości..." ("Opcje..." w Outlook 2003)  z menu kontekstowego podświetlonej wiadomości. Nagłówki dostępne są w polu "Nagłówki internetowe:". Aby Outlook udostępniał (zapisywał) oryginalne źródło wiadomości konieczna jest zmiana jego konfiguracji poprzez rejestr.

W kluczu (dla Outlook 2007):

HKEY_CURRENT_USER\­­Software\­­Microsoft\­­Office\­­12.0\­­Outlook\­­Options\­­Mail

Dla Outlook 2003:
HKEY_CURRENT_USER\­­Software\­­Microsoft\­­Office\­­11.0\­­Outlook\­­Options\­­Mail
Jeśli klucz Mail nie istnieje należy go utworzyć.
Należy dodać wartość typu DWORD o nazwie:
SaveAllMIMENotJustHeaders
Jako wartość tego pola należy wpisać 1.

Po wprowadzeniu zmian należy ponownie uruchomić program Outlook. Ta modyfikacja dotyczy wyłącznie wiadomości pobranych po jej wprowadzeniu. Wiadomości zapisane wcześniej nie zmienią się.

Plik .reg dla Outlook 2007
Plik .reg dla Outlook 2003

wtorek, 2 marca 2010

nCipher nShield F3 i Java

Utworzenie keystora chronionego kartą OCS:
$JAVA_HOME/bin/keytool -genkey -keystore ncqa -storepass 123456 -alias ncqaalias -keypass 123456 -keyalg RSA -keysize 1024 -sigalg SHA1withRSA -storetype nCipher.sworld
Keystor chroniony przez moduł:
java -Dprotect=module -DignorePassphrase=true -cp "$CLASSPATH;." sun.security.tools.KeyTool -genkey -keystore ncqa -storepass 123456 -alias ncqaalias -keypass 123456 -keyalg RSA -keysize 1024 -sigalg SHA1withRSA -storetype nCipher.sworld
Lista kluczy w keystore:
$JAVA_HOME/bin/keytool -list -v -keystore ncqa  -storepass 123456 -storetype nCipher.sworld

Sendmail - smarthost z smtp-auth

Dla systemu CentOS

1. Instalacja systemu konfiguracyjnego dla Sendmail-a:
yum install -y sendmail-cf
2. Edycja pliki  /etc/mail/sendmail.mc
Dopisanie linii:
define(`SMART_HOST', `smtp.serwer.pl')dnl
3. Edycja pliki /etc/mail/access
Dopisanie:
AuthInfo:smtp.serwer.pl "U:<username>" "P:<password>" "M:PLAIN"
4. Generacja plików konfiguracyjnych
W katalog /etc/mail/ wydajemy polecenie:
make
5.  Restart usługi sendmail
service sendmail reload
Jeśli chcemy ukryć informacje o ścieżce jaką przeszła wiadomość pocztowa możemy dodatkowo w plikach /etc/mail/sendmail.cf i /etc/mail/submit.cf wstawić znaki komentarza w linach zaczynających się od:
HReceived
Operację tą należy powtórzyć po każdym wygenerowaniu plików konfiguracyjnych.

mismatch_cnt is not 0 on /dev/md0

Problem występuję w przypadku gdy przy zapisie do macierzy operacja zostanie przerwana i dane nie zostaną zapisane na wszystkie dyski tworzące macierz. Sytuacja ta często mam miejsce w przypadku gdy SWAP znajduję się na urządzeniu MD. 
cat /sys/block/md0/md/mismatch_cnt
Wyświetli ilość bloków, które nie zostały zapisane na wszystkich dyskach.

Naprawa:
echo repair >/sys/block/md0/md/sync_action
echo check >/sys/block/md0/md/sync_action
 Operacja check jest wymagana by wyzerować licznik mismatch_cnt

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.