środa, 24 grudnia 2008

check_pgpool - nagios plugin for pgpool-II

check_pgpool.rb - simple nagios plugin to check pgpool nodes status with pcp_node_info. Usefull to monitor are all nodes conneted.

checkcommands.cfg:

define command {
command_name check_pgpool
command_line $USER1$/check_pgpool.rb $ARG1$
}


services.cfg:

define service {
use generic-service
host_name pool.hostname
service_description PGPOOL1
is_volatile 0
check_period 24x7
max_check_attempts 4
normal_check_interval 5
retry_check_interval 1
contact_groups admins
notification_interval 960
notification_period 24x7
check_command check_pgpool!1
}

środa, 17 grudnia 2008

PostgreSQL tricks with broken db

Few PostgreSQL tricks for broken db:

case:

pg_dump: query returned 0 rows instead of one: SELECT typlen, typinput, typoutput, typreceive, typsend, typmodin, typmodout, typanalyze, typinput::pg_catalog.oid as typinputoid, typoutput::pg_catalog.oid as typoutputoid, typreceive::pg_catalog.oid as typreceiveoid, typsend::pg_catalog.oid as typsendoid, typmodin::pg_catalog.oid as typmodinoid, typmodout::pg_catalog.oid as typmodoutoid, typanalyze::pg_catalog.oid as typanalyzeoid, typdelim, typbyval, typalign, typstorage, pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) as typdefaultbin, typdefault FROM pg_catalog.pg_type WHERE oid = '1325300'::pg_catalog.oid

solution:

reindexdb -h localhost -U postgres db_name


case:

pg_dump: Error message from server: ERROR: catalog is missing 4 attribute(s) for relid 1325439

solution:

REINDEX TABLE pg_catalog.pg_attribute;


case:

pg_dump: failed sanity check, parent table OID 16401 of pg_rewrite entry OID 16403 not found

solution:

delete from pg_rewrite where oid = 16403;
REINDEX TABLE pg_catalog.pg_rewrite;

wtorek, 2 grudnia 2008

Amazon CloudFront in Ruby

Last month Amazon launch new service - Amazon CloudFront. Amazon CloudFront delivers your content from Amazon S3 using a global network of edge locations. Sweet, really nice solution for quite expensive Akamai (yes, I know Akamai is cheaper at some level, but startups don't have such budget). At start they release only Amazon CloudFront Authentication Tool for Curl. So decide to wrote own tool in ruby (atm there is RightScale Ruby library but when I wrote that there wasn't any such tool).

First, I try use curb (Libcurl bindings for Ruby), but then notice that can be done more simple only with Net::HTTP

According to Developer Guide correct REST Requests needs URI indicates the particular resource you want to act on, also needs correct Request Headers (Authorization, Content-Length, Content-Type, Date, Host, x-amz-date).

Date/x-amz-date like at provided by Amazon curl script, get from Amazon server:

def self.server_date(url)
server_date=''
uri = URI.parse(url)
http = Net::HTTP.new(uri.host,443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
response=http.request_get(uri.path)
response['Date']
end


Authorization generate as Amazon documentation said:

def self.sign(date)
digest = OpenSSL::Digest::Digest.new('sha1')
hmacd=HMAC.new(AWS_SECRET_ACCESS_KEY, digest)
hmacd.update(date)
signature=Base64.encode64(hmacd.digest)
end


So simple list distribution can be done like that:

def ACFList(url)
date=server_date(url)
uri = URI.parse(url)
http = Net::HTTP.new(uri.host,443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
headers = {
'X-AMZ-Date' => date,
'Authorization' => 'AWS ' + AWS_ACCESS_KEY_ID + ':' + sign(date).chop
}
response=http.request_get(uri.path,headers)
response
end


Example:

./acf.rb list https://cloudfront.amazonaws.com/2008-06-30/distribution
<?xml version="1.0"?>
<DistributionList xmlns="http://cloudfront.amazonaws.com/doc/2008-06-30/"><Marker></Marker><MaxItems>100</MaxItems><IsTruncated>false</IsTruncated></DistributionList>


Hole code can be find here

poniedziałek, 1 grudnia 2008

Kreatywna matematyka według Tesco

Dzisiaj w Tesco odkryłem nową, kreatywną wersje matematyki. Idąc między regałami zauważyłem:



Ser Philadelphia - 3,29zł (ta mała cena po lewej stronie). Promocja 2 sztuki za 6zł. Niby ok, jest promocja jest dobrze. Niepokoi mnie tylko informacja "Oszczędzasz 6zł"

WTF ?!?

2x3,29zł = 6,58zł
- 6,00zł
-----------------
0,58zł (nijak 6zł nie wychodzi)

Idąc za ciosem zrobiłem jeszcze kilka zdjęć:



czwartek, 13 listopada 2008

Less spam ? Yeah McColo's is down.

Really interesting news read today. According to Boris Veldhuijzen van Zanten spam levels fell by 66% after Tuesday. That happened after Internet providers cut off McColo’s (Site is down) connectivity to the Internet.



Incredible isn't it ?

czwartek, 30 października 2008

Dj Wonter - Wings - Official Music Video

Wicked tune made by Wonter. Check it !

poniedziałek, 27 października 2008

Squid with AWStats

I've search a bit, but couldn't find any nice howto. All links told me to turn on "emulate_httpd_log" or change logformat in squid.conf. Cool, but I've got logs from last month with standard logformat - squid and like to know how much bandwidth at Amazon EC2 will cost.

Lets see, standard squid logs looks like that:

1224992424.377 0 127.0.0.1 TCP_MEM_HIT/200 1046 GET http://sitename/www/Etrade/js/translation.js? - NONE/- application/x-javascript

With little sed help, logs could looks like that:

1224992424 0 127.0.0.1 TCP_MEM_HIT 200 1046 GET /sitename/www/Etrade/js/translation.js? - NONE/- application/x-javascript

How ?

LogFile="cat /path/to/log/squid-access_log | sed 's/\.[0-9]\{3\}\s\{5\}//' | sed 's/\// /' | sed 's/http\:\///' |"

Now just few min generate report .. et voila ;)

czwartek, 25 września 2008

Why EC2 command line API-tools sucks...

Every time cron daemon run ruby scripts witch contain command line EC2 API-tools load grow up and take a lot resources. In last days decide to rewrite it. For some configure files need to check often what IP's got working www backends or database backends. Got for that class in ruby:

machine.rb:

require 'resolv'

class Machine

IMAGES = {
'www' => ['ami-WWWWWWWW'],
'db' => ['ami-DBDBDBDB'],
'kolektor' => ['ami-POOLPOOL'],
}

MACHINES = {
'www' => [],
'db' => [],
'kolektor' => [],
}

def self.getips
output=`ec2-describe-instances`
output.split("\n").each do |line|
IMAGES.each do |type, amis|
amis.each do |ami|
if line.match('\s' + ami + '\s.*?running')
ip = Resolv.getaddress(line.split[3])
MACHINES[type] << ip
end
end
end
end
MACHINES
end
end


Easy for use at other scripts like that:

getwww.rb:

#!/usr/bin/ruby

require 'machines.rb'

puts Machine.getips['www']


But that was slow and take too much resources. Discover project amazon-ec2.rubyforge.org and rewrite that class.

machines_new.rb:

require 'resolv'
require 'rubygems'
require 'EC2'

class Machine

ACCESS_KEY_ID = 'your_access_key_id'
SECRET_ACCESS_KEY = 'your_secret_access_key'


IMAGES = {
'www' => ['ami-WWWWWWWW'],
'db' => ['ami-DBDBDBDB'],
'kolektor' => ['ami-POOLPOOL'],
}

MACHINES = {
'www' => [],
'db' => [],
'kolektor' => [],
}

def self.getips
ec2 = EC2::Base.new(:access_key_id => ACCESS_KEY_ID, :secret_access_key => SECRET_ACCESS_KEY)
ec2.describe_instances.reservationSet.item.each do |reservation|
IMAGES.each do |type, amis|
amis.each do |ami|
reservation.instancesSet.item.each do |item|
if item.imageId.match(ami)
ip = Resolv.getaddress(item.dnsName)
MACHINES[type] << ip
end
end
end
end
end
MACHINES
end
end


How fast could be use non-JAVA EC2 API-tools ?

With old class:

# time for i in `seq 1 20`; do ./getwww.rb ; done
real 3m58.211s
user 0m48.870s
sys 0m2.650s

With new class:

# time for i in `seq 1 20`; do ./getwww.rb ; done
real 0m20.234s
user 0m6.570s
sys 0m0.870s

Only 11.5x times faster ! And doesn't take 80mb mem, just 10mem for 1 sec.

niedziela, 21 września 2008

Ksero...

Nigdy nie pomyślałbym, że ksero może mnie potrzebować. Widać to moje przeznaczenie, albo matrix i jestem tylko kawałkiem softu :(

środa, 10 września 2008

"Prawie" bezpiecznie :)



Nie ma to jak zaufanie, że nikt nie zwróci na to uwagi :)

ps. Zabezpieczeniem były 3 naklejki, więc nie trzeba było nawet rozklejać, żeby sprawdzić co jest w środku.

wtorek, 2 września 2008

Google Chrome

Od wczoraj wszędzie jest głośno o Google Chrome. Wszyscy zastanawiają jaka będzie przeglądarka od Google ? Wielu wróży walkę Google z Microsoftem na polu przeglądarek internetowych. Pytanie tylko czy Microsoft ma się czego obawiać ? Według mnie nie ma czego, wręcz stwierdził bym, że Google zamierza przejąć użytkowników FF i Opery.
IE króluje na rynku przeglądarek internetowych dlatego, że jest domyślnie instalowana wraz z systemem operacyjnym. Klient kupując komputer z systemem operacyjnym (a który w znakomitej większości to Windows) otrzymuje od razu przeglądarkę internetową. Jeżeli mu czegoś w tym produkcie nie brakuje to taki użytkownik nie będzie zmieniał tej przeglądarki bo i po co. Oczywiście FF, Opera walczą o takiego użytkownika, ich udział w rynku się zwiększa, ale zwiększa się głównie o użytkowników którzy zobaczyli inne możliwości i są świadomi faktu że mogą sobie zmienić przeglądarkę internetową. Są to dokładanie Ci sami użytkownicy który przeczytają/dowiedzą się/usłyszą o nowym produkcie Google i postanowią go wypróbować. Jeżeli produkt będzie na odpowiednim poziomie, pewnie przy nim zostaną.
Należy się również zastanowić jaki biznes widzi w tym Google. Nie od dzisiaj wiadomo, że z produktami Google jest jak z mężczyzną z reklamy - muszą zarabiać. Skoro muszą, a jasne jest że Google to nie organizacja non-profit, więc należy się zastanowić czy reklamy nie będą drażnić osoby przyzwyczajone do aplikacji takich jak FF, gdzie reklam nie mają ze strony samej aplikacji.
Reasumując odnoszę wrażenie, że Google postanowiło przejąć fragment rynku zajęty przez FF czy Operę oferując produkt który rozwiązuje pewne uciążliwe wady dostępnych przeglądarek. Natomiast nie sądzę żeby w perspektywie kilku lat Google mogło zagrozić dominacji IE. Chodź nie wykluczone jest, że w przypadku wypuszczenia systemu operacyjnego przez Google z domyślną przeglądarkę Chrome taki stan rzeczy może ulec zmianie.

poniedziałek, 1 września 2008

Nowa guildia

W ostatnim czasie źle się działo w Beltaine dlatego spora część trzeźwo myślących osób (w tym ja) zmieniło guildie na Enclave. A wraz z nową guildią zaczęło się raidowanie. Na dzień dobry poszło SSC (The Lurker Below,Morogrim Tidewalker), a następnie dla rozluźnienia Gruul's Lair jako, że zostało trochę czasu z zaplanowanych 4h grania.




Nowy Firmware: 01-17-080812-15-POP-402

22 sierpnia ukazał się nowy firmware do Popcorn Hour. Z uwagi na wyjątkowo dziwny sposób powiadamiania o update-ach udało mi się to przegapić (kto normalny robi topic na jakimś forum na którym jak się pokaże nowy post to znaczy, że jest nowy firmware ?!?). Wracając do firmware-u, ot kilka ciekawostek, które ze sobą niesie:
- USB HDD spindown,
- Ogg Vorbis and Vorbis in MKV support,
- Fixed ISO crash on VESA mode,
- Changed to 8bpp font, should improve subtitle text,
- Improved bitrate throughput of playback over SMB to ~38Mbps, up from ~25Mbps. Same as NFS performance now,
(pełna lista zmian dostępna: tutaj)
Z zauważalnych rzeczy dla mnie, to faktycznie poprawiona obsługa SMB oraz nareszcie działające poprawnie obrazy płyt DVD (można w końcu zrobić kopie kolekcji DVD na dysku, dla wygodniejszego odtwarzania).

środa, 20 sierpnia 2008

Popcorn Hour A-110




No i ukazał się nowy odświeżony Popcorn Hour. W zasadzie zmiany są czysto kosmeczyne:

- 2.5"/3.5" SATA HDD
- USB Slave
- HDMI 1.3a
- co-axial S/PDIF w miejsce optical S/PDIF

Czy warto go kupić posiadając A-100... sądzę że nie. Zasadniczo nowa wersja nie niesie za sobą żadnej rewolucji, ani znaczących zmian. Jeżeli już ktoś posiada wersje A-100 i dokupił do niej dysk ATA, to bez sensu wymieniać to na SATA. HDMI 1.3a bardzo ładnie wygląda tylko, żeby faktycznie z tego korzystać trzeba mieć jeszcze odpowiedni sprzęt audio który pozwoli na "usłyszenie" dobrodziejstw DTS HD-HR, DTS HD-MA, Dolby Digital Plus oraz Dolby TrueHD no i content który będzie posiadał ten dźwięk. Zakładając, że ktoś posiada już odpowiedni sprzęt audio nie sądzę żeby bawiło go przerzucanie contentu specjalnie na Popcorn, skoro posiada już płytę. Dalej USB Slave może to i szybsze niż Ethernet (mój popcorn 100Mbit/s po ftp to raczej nie chce trzymać, wręcz daleko mu do tego), ale z drugiej strony specjalnej różnicy raczej nikomu nie robi czy będzie miał coś minutę szybciej czy wolniej. Poza 1080p, które faktycznie streamowane przez Ethernet nie działa najlepiej, to reszta wyrabia się w zupełności w A-100, natomiast z dysku chodzi wszystko płynnie.

Reasumując Popcorn Hour dobrze, że przeszedł lekkie odświeżenie, ale nie zaszły w nim żadnej istotne zmiany, które mogły by sugerować potrzebę wymiany starego A-100 na A-110. Sądzę, że zmiany miały raczej na celu utarcie nosa konkurencji, która wytykała A-100 np. brak podłączenia dysków SATA.

poniedziałek, 4 sierpnia 2008

Import exist bind into smbind

Smbind bring simple PHP-based tool for managing DNS zones for BIND via the web. Since I don't really want atm change BIND into BIND-DLZ, Smbind looks nice and it's really simple to change anything at webpanel.

There is one small problem. Smbind doesn't provide any scripts to import exist bind zones into DB. So create one:

file: https://github.com/ljagiello/scripts/blob/master/import_bind.rb

Import from slave dns, cause that files create BIND and got regular structure. Files to import are in 'slave' dir.

czwartek, 31 lipca 2008

EC2 and pgpool

Some tips how to make PostgreSQL backends with pgpool work at Amazon EC2:

First of all I made script witch keeps all IP's all useful backends:
name: machine.rb
#v+

require 'resolv'

class Machine

IMAGES = {
'www' => ['ami-12345678'],
'db' => ['ami-23456789'],
'pooler' => ['ami-34567890'],
}

MACHINES = {
'www' => [],
'db' => [],
'pooler' => [],
}

def self.getips
output=`ec2-describe-instances`
raise 'Not working: ' + output if !output.match(/^RESERVATION/)
output.split("\n").each do |line|
IMAGES.each do |type, amis|
amis.each do |ami|
if line.match('\s' + ami + '\s.*?running')
ip = Resolv.getaddress(line.split[3])
MACHINES[type] << ip
end
end
end
end
MACHINES
end
end

#v-

So after call 'Machine.getips' I will receive table with www,db,pooler and IPs. Now lets say I wanna create /etc/hosts with current list all my backends (useful for csync2 witch need hosts not IP)

name: createhosts.rb
#v+

#!/usr/bin/ruby

require '/path/to/machine.rb'
require "ftools"

def command_output(command)
output = nil
IO.popen(command) do |f| output = f.readlines end
output
end

ips = Machine.getips
local_ip = command_output('/sbin/ip addr show eth0')[2][/inet (.*?)\//,1]

if File.exists?("/etc/hosts") == false
f = File.new("/etc/hosts", "w+")
f.close
end

f = File.open('/etc/hosts.tmp','w')

f.puts "127.0.0.1 localhost\n" +
ips['pooler'][0] + " db.pooler\n" +
local_ip + " " + local_ip.gsub(/\./,'_') + ".domain " + local_ip.gsub(/\./,'_') + "\n" +
local_ip + " pooler.domain pooler\n"

ips['www'].each do |ip|
f.puts ip + " " + ip.gsub(/\./,'_')
end

ips['db'].each do |ip|
f.puts ip + " " + ip.gsub(/\./,'_')
end


f.close

File.move("/etc/hosts.tmp", "/etc/hosts")

#v-

Also it's easy to create some script for certain use like this:

name: getpooler.rb
#v+

#!/usr/bin/ruby

require '/path/to/machine.rb'

puts Machine.getips['pooler'][0]

#v-

Witch gimme IP of host with pgpool.

Now let's say I got fresh Fedora Core 9 with postgresql. At /etc/rc.d/rc.local of my image put such line:

echo "host all all `/path/to/getpooler.rb` 255.255.254.0 trust" >> /var/lib/pgsql/data/pg_hba.conf


So trust access will be from my pgpool host. Postgresql.conf file it's goot to keep in some SVN, so easy to change there options. So correct create image should give us always fresh image of postgresql witch know where is pgpool.

czwartek, 17 lipca 2008

Fatboy Slim: Big Beach Boutique II - Live On Brighton Beach DVD


Świetna impreza, genialnego Fatboy Slim-a. Jak imprezować to tylko na imprezach z jego udziałem. Gorąco polecam.

ps. Poszukuje gdzie można kupić _oryginalną_ płytkę z Fatboy Slim - In Brazil - Incredible Adventures. Jak ktoś ma jakiekolwiek namiary proszę o informacje.

środa, 9 lipca 2008

PostgreSQL + pgpool-II - replication mode + online-recovery

Since a lot ppl translate that to English with google translator I decide to make them little help.

After few weeks trail-end-error method find out that replication in postgresql with multimaster and online-recovery is really simple. So:

I use:
- pgpool-II
- PostgreSQL 8.3.3 from Fedora Core 9

Testing environment was: Amazon EC2

Start configuration:
- Hostname: db, IP: 10.0.0.1, Use for: Pgpool-II node
- Hostname: pghost1, IP: 10.0.0.x, Use for: PostgreSQL node 1
- Hostname: pghost2, IP: 10.0.0.z, Use for: PostgreSQL node 2

First from pgpool-a side (/etc/pgpool.conf):


listen_addresses = '*'
port = 5432
pcp_port = 9898
socket_dir = '/var/run'
pcp_socket_dir = '/var/run'
backend_socket_dir = '/var/run'
pcp_timeout = 10
num_init_children = 32
max_pool = 4
child_life_time = 300
connection_life_time = 0
client_idle_limit=600
authentication_timeout=0
child_max_connections = 0
logdir = '/var/log'
replication_mode = true
replication_strict = true
replication_timeout = 5000
load_balance_mode = true
replication_stop_on_mismatch = true
replicate_select = false
reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'
print_timestamp = true
master_slave_mode = false
connection_cache = true
health_check_timeout = 20
health_check_period = 60
health_check_user = 'hchecker'
failover_command = ''
failback_command = ''
insert_lock = false
ignore_leading_white_space = true
recovery_user='pgrecov'
recovery_password = ''
recovery_1st_stage_command = 'base-backup.sh'
recovery_2nd_stage_command = 'pgpool-recovery'
log_statement = true
log_connections = true
log_hostname = true
parallel_mode = false
enable_query_cache = false
pgpool2_hostname = 'db'
enable_pool_hba = false

backend_hostname0 = '10.0.0.x'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/var/lib/pgsql/data'

backend_hostname1 = '10.0.0.z'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/var/lib/pgsql/data'


also /etc/pcp.conf:
admin:a8555f20b804e53934ee112121ed3r5

From postgresql side:
Account for pgpoola:
  • User: pooler
  • Password: NONE
  • Permissions: superuser.
In pg_hba.conf:
  • host all pooler 10.0.0.1/32 trust
At all postgresql servers:
  • psql -f pgpool-recovery.sql template1 (in source of pgpool you can find that file)
  • also should be compile pgpool function for online-recovery
  • should be turn on PITR in postgresql server
  • for each postgresql server data dir should contain 3 scripts: base-backup.sh, pgpool-recovery, pgpool_remote_start.
base-backup.sh:
#!/bin/sh
# PGDATA path for master node
DATA=$1
# Recovery host name
RECOVERY_TARGET=$2
# PGDATA path for recovery node
RECOVERY_DATA=$3
# ok, this needs to be issued on some running backend, so I
# personally use pcp_node_count and pcp_node_info to get the
# ip address of a master (script follows, as soon as the
# cluster is running well
psql -c "select pg_start_backup('pgpool-recovery')" postgres
# I would favor /tmp/pgpool-recovery instead of /data,
# as it contains live data
echo "restore_command = 'scp $HOSTNAME:/data/archive_log/%f %p'" > /var/lib/pgsql/data/recovery.conf
# I guess pgsql is the datadir I've with /var/lib/postgresql/8.3/main
# under debian?
tar -C /mnt -zcf pgsql.tar.gz pgsql
psql -c 'select pg_stop_backup()' postgres
scp /mnt/pgsql/data/pgsql.tar.gz $RECOVERY_TARGET:/mnt/pgsql/

In my version of that script, data dir is unpack in /mnt cause I keep there postgresql server. It's place where I mount Amazon EC2 storage. Links to /var/lib/pgsql -> /mnt/pgsql

pgpool-recovery:
#!/bin/sh
# Archive a current xlog.
psql -c 'select pg_switch_xlog()' postgres


pgpool_remote_start:
#!/bin/sh
DEST=$1
DESTDIR=$2
PGCTL=/usr/bin/pg_ctl

# Expand a base backup
ssh -T $DEST 'cd /mnt/; tar zxf pgsql/pgsql.tar.gz' 2>/dev/null 1>/dev/null < /dev/null # Startup PostgreSQL server ssh -T -l root $DEST /etc/init.d/postgresql restart 2>/dev/null 1>/dev/null < /dev/null &


As far as I notice doesn't work yet restart when postgresql server is working.

Run pgpool:

# /usr/bin/pgpool -f ../etc/pgpool.conf -F ../etc/pcp.conf -n  > /var/log/pgpool/pgpool.log 2>&1 & 

Now small test:
  1. Turn off one postgresql server,
  2. Made some changes at base,
  3. Online-recovery: pcp_recovery_node 5 localhost 9898 admin secret_pass 1
  4. pgpool made backup at working node(node0) - checkpoint + tar data dir,
  5. Backup move at unworking node(node1),
  6. Second checkpoint copy WALs, connections from client side are stop,
  7. Untar,
  8. Turn on postgres at node1.


Debug:

2008-07-10 15:03:43 DEBUG: pid 15173: starting health checking
2008-07-10 15:03:43 DEBUG: pid 15173: health_check: 0 the DB node status: 2
2008-07-10 15:03:43 DEBUG: pid 15173: health_check: 1 the DB node status: 3
2008-07-10 15:03:49 DEBUG: pid 15207: I am PCP 15207 accept fd 5
2008-07-10 15:03:49 DEBUG: pid 15207: pcp_child: received PCP packet type of service 'M'
2008-07-10 15:03:49 DEBUG: pid 15207: pcp_child: salt sent to the client
2008-07-10 15:03:49 DEBUG: pid 15207: pcp_child: received PCP packet type of service 'R'
2008-07-10 15:03:49 DEBUG: pid 15207: pcp_child: authentication OK
2008-07-10 15:03:49 DEBUG: pid 15207: pcp_child: received PCP packet type of service 'O'
2008-07-10 15:03:49 DEBUG: pid 15207: pcp_child: start online recovery
2008-07-10 15:03:49 LOG: pid 15207: starting recovering node 1
2008-07-10 15:03:49 DEBUG: pid 15207: exec_checkpoint: start checkpoint
2008-07-10 15:03:49 DEBUG: pid 15207: exec_checkpoint: finish checkpoint
2008-07-10 15:03:49 LOG: pid 15207: CHECKPOINT in the 1st stage done
2008-07-10 15:03:49 LOG: pid 15207: starting recovery command: "SELECT pgpool_recovery('base-backup.sh', '10.0.0.y', '/var/lib/pgsql/data')"
2008-07-10 15:03:49 DEBUG: pid 15207: exec_recovery: start recovery
2008-07-10 15:04:43 DEBUG: pid 15173: starting health checking
2008-07-10 15:04:43 DEBUG: pid 15173: health_check: 0 the DB node status: 2
2008-07-10 15:04:43 DEBUG: pid 15173: health_check: 1 the DB node status: 3
2008-07-10 15:05:08 DEBUG: pid 15207: exec_recovery: finish recovery
2008-07-10 15:05:08 LOG: pid 15207: 1st stage is done
2008-07-10 15:05:08 LOG: pid 15207: starting 2nd stage
2008-07-10 15:05:08 LOG: pid 15207: all connections from clients have been closed
2008-07-10 15:05:08 DEBUG: pid 15207: exec_checkpoint: start checkpoint
2008-07-10 15:05:09 DEBUG: pid 15207: exec_checkpoint: finish checkpoint
2008-07-10 15:05:09 LOG: pid 15207: CHECKPOINT in the 2nd stage done
2008-07-10 15:05:09 LOG: pid 15207: starting recovery command: "SELECT pgpool_recovery('pgpool-recovery', '10.0.0.y', '/var/lib/pgsql/data')"
2008-07-10 15:05:09 DEBUG: pid 15207: exec_recovery: start recovery
2008-07-10 15:05:09 DEBUG: pid 15207: exec_recovery: finish recovery
2008-07-10 15:05:09 DEBUG: pid 15207: exec_remote_start: start pgpool_remote_start
2008-07-10 15:05:33 DEBUG: pid 15207: exec_remote_start: finish pgpool_remote_start
2008-07-10 15:05:33 LOG: pid 15207: 1 node restarted
2008-07-10 15:05:33 LOG: pid 15207: send_failback_request: fail back 1 th node request from pid 15207
2008-07-10 15:05:33 LOG: pid 15207: recovery done
2008-07-10 15:05:33 DEBUG: pid 15173: failover_handler called
2008-07-10 15:05:33 DEBUG: pid 15173: failover_handler: starting to select new master node
2008-07-10 15:05:33 LOG: pid 15173: starting fail back. reconnect host 10.252.178.18(5432)
2008-07-10 15:05:33 LOG: pid 15173: failover_handler: do not restart pgpool. same master node 0 was selected
2008-07-10 15:05:33 LOG: pid 15173: failback done. reconnect host 10.252.178.18(5432)
2008-07-10 15:05:33 DEBUG: pid 15207: pcp_child: received PCP packet type of service 'X'
2008-07-10 15:05:33 DEBUG: pid 15207: pcp_child: client disconnecting. close connection
2008-07-10 15:05:43 DEBUG: pid 15173: starting health checking
2008-07-10 15:05:43 DEBUG: pid 15173: health_check: 0 the DB node status: 2
2008-07-10 15:05:43 DEBUG: pid 15173: health_check: 1 the DB node status: 1


Any suggestions, mistakes, improves ? I would be really happy if you let me know.

#UPDATE 1 (24.09.2008):
- Notice that gzip PostgreSQL base dir isn't most smart idea. Better just tar it, otherway will take ages to create archive if database got few GB.
- Access to 'template1' at recovery process is blocked, not really know yet what to do with that.

niedziela, 29 czerwca 2008

Szybka Onyxia

Szybka Onyxia w 5 osób...



, a czemu by nie. 10min zabawy ... 31g w kieszeni. Ciężko o lepszą farmę.

niedziela, 22 czerwca 2008

Popcorn Hour A-100 Firmware Update ... finally :)

No i doczekałem się w końcu nowego firmware-u.

Z ciekawszych rzeczy które się pojawiły:
- wielkość napisów można zwiększać aż do rozmiaru 32,
- poprawione centrowanie napisów,
- rozwiązane sporo problemów z dźwiękiem przy MKV,
- dodanie obsługi skórek,

Reszta fixów dla mnie mało zauważalna, bo nie miałem z tym problemu.

wtorek, 17 czerwca 2008

iMac

Po dzisiejszej całodniowej zabawie iMac-iem mam przed oczami tylko jeden obraz:



Natomiast z ciekawych rzeczy, które zauważyłem to:
- VNC server jako aplikacja systemu OutOfBox,
- iPhone SDK,
- płynność działania wszelkich gadżetów

A z denerwujących rzeczy, które zauważyłem to:
- Apple Remote Desktop nie ma klienta na żadną inną platformę niż MACOSX,
- Brak nawet płatnej możliwości zdalnego używania komputera przez kilka osób jednocześnie każda z własnym pulpitem,

niedziela, 15 czerwca 2008

myiHome

myiHome bardzo pozytywnie mnie zaskoczył wersją pod Windows-a, Mac-a, Linux-a. Głównie dlatego że użyto Javy i chyba jak na razie jest to jedyna aplikacja, która napisana w Javie mi się podoba.

ps. Jak na razie dość denerwującą rzeczą w Popcorn Hour jest brak jakichkolwiek wizualizacji czy losowych obrazów przy odtwarzaniu muzyki bezpośrednio z wewnętrznego dysku. Trochę nadrabia stream poprzez myiHome, ale nadal są to 4 obrazki na krzyż. Trochę męczy po dłuższym czasie gapienie się w te same obazki.

UPDATE #1:
Odkryłem właśnie w prawym górnym rogu zakładkę "Preference" w której można wskazać katalog z którego będą serwowane obrazki w czasie słuchania muzyki, lub muzyka w czasie oglądania zdjęć. Zwracam honor :)

poniedziałek, 26 maja 2008

Void Reaver



I tak oto, po 3h prób i błędów padł Void Reaver. Pierwsze T5 rozdane, może kiedyś też będę miał ;-D

piątek, 9 maja 2008

Pierwsze wrażenia z zabawy Popcorn Hour A-100


/ # cat /proc/cpuinfo
system type : Sigma Designs TangoX
processor : 0
cpu model : MIPS 4KEc V6.9
Initial BogoMIPS : 292.86
wait instruction : yes
microsecond timers : yes
tlb_entries : 32
extra interrupt vector : yes
hardware watchpoint : yes
ASEs implemented : mips16
VCED exceptions : not available
VCEI exceptions : not available
System bus frequency : 198000000 Hz
CPU frequency : 297000000 Hz
DSP frequency : 297000000 Hz

/ # uname -a
Linux PCH-A100 2.6.15-sigma #2398 PREEMPT Tue Apr 15 14:40:35 MYT 2008 mips unknown

Kto by pomyślał że 300Mhz starczy do dekodowania x264 w 1080p ;-D

środa, 7 maja 2008

Kochany truecrypt...

Po jedynych 12h oczekiwania, okazało się, że wybranie braku systemu plików przy tworzeniu nowego szyfrowanego voluminu oznacza brak możliwości zamontowania go i utworzenia na nim jakiegokolwiek systemu plików. Dlatego należy wybrać system plików FAT, poczekać kolejne 12h, żeby go skasować i w jego miejsce stworzyć ext3. Jakie intuicyjne ;-D

ps. Oczywiście w wersji 4.3 nie było potrzeba takich rzeczy robić.

wtorek, 22 kwietnia 2008

Dlaczego Windows ssie ?

Wolumin dublowany, znany również jako wolumin RAID-1,
to wolumin odporny na uszkodzenia, w którym dane są
duplikowane na dwóch różnych dyskach fizycznych.
Woluminy dublowane znajdują się na dyskach dynamicznych,
zapewniając bezpieczeństwo danych dzięki utworzeniu
dwóch identycznych kopii woluminu.

Woluminów dublowanych nie można tworzyć na komputerach
z systemem Windows XP Home Edition, Windows XP Professional
lub Windows XP 64-Bit Edition. Aby utworzyć woluminy
dublowane na komputerach zdalnych z systemami Windows 2000
Server, Windows 2000 Advanced Server lub Windows 2000
Datacenter, można jednak użyć komputera z systemem
Windows XP Professional. Aby to zrobić, należy posiadać
na komputerze zdalnym uprawnienia administratora.
źródło

No WTF ? Software RAID1 nie potrafi zrobić out-of-box. Żenada.

niedziela, 13 kwietnia 2008

Niektórzy mają za dobrze...


txlabfx:/home/lido$ prtconf
System Model: IBM,9117-MMA
Machine Serial Number: 1054D20
Processor Type: PowerPC_POWER6
Number Of Processors: 8
Processor Clock Speed: 4704 MHz
CPU Type: 64-bit
Kernel Type: 64-bit
LPAR Info: 1 lido2
Memory Size: 58624 MB
Good Memory Size: 58624 MB
Platform Firmware level: Not Available
Firmware Version: IBM,EM310_063
Console Login: enable
Auto Restart: true
Full Core: false


Ot jak prosto można innych zdenerwować ;p