HowTo: Strawberry Perl v5.12.3 x64 upgrade to OpenSSL v1.0.0d from "OpenSSL 1.0.0-beta4"

2011-06-07 17-41:

Better method

See later:
Update strawberry-perl-5.12.3.0-64bit.zip library to kmx/64_libs/5.12/*.zip:

2011-06-02 13-02:
See later:
Which way is the true way, and what not? "-lssleay32 -llibeay32" Way? Or "-lssl -lcrypto" Way?

Full enviroment see:
Mini How-To: practical method to install ASSP v2.X on Windows x64 using Strawberry Perl v5.12.X x64

———————–


Strawberry Perl v5.12.3 x64 contain "OpenSSL 1.0.0-beta4":
==
C:\strawberry\c\bin>openssl.exe version
WARNING: can't open config file: c:/compile/build/_wrk_libs64__.out/ssl/openssl.cnf
OpenSSL 1.0.0-beta4 10 Nov 2009
==

Current version OpenSSL:
==
C:\openssl\bin>openssl.exe version
OpenSSL 1.0.0d 8 Feb 2011
==

Upgrade OpenSSL:

Download
MSYS-20110526.zip
from

http://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20%28Win64%20hosted%29/MSYS%20%2832-bit%29/

Unpack to
C:\msys\

Run msys postinstall script:
c:\msys\postinstall\pi.bat

===
"Do you have MinGW installed? [yn ] "
===

Answer that your mingw is "c:/strawberry/c" :
==
c:/strawberry/c
==

Download
ftp://ftp.openssl.org/source/openssl-1.0.0d.tar.gz

copy it to
C:\msys\

Run:
C:\msys\msys.bat

Swith to MSYS shell

Unpack openssl-1.0.0d.tar.gz :
tar xfhz openssl-1.0.0d.tar.gz

cd /openssl-1.0.0d

Run:
./configure mingw64 shared no-asm no-hw --openssldir=/openssl
make
make test
make install

Close MSYS shell

Copy
C:\msys\openssl
to
C:\openssl

Rename
C:\strawberry\c\include\openssl
to
C:\strawberry\c\include\openssl-Orig

Copy
C:\openssl\include\openssl
to
C:\strawberry\c\include\openssl

Create dir:
md C:\strawberry\c\bin\openssl-Orig

Move files
openssl.exe
libeay32__.dll
ssleay32__.dll
to
C:\strawberry\c\bin\openssl-Orig\

Copy
C:\openssl\bin\*.exe
C:\openssl\bin\*.dll
( i.e.
libeay32.dll
openssl.exe
ssleay32.dll
)
to
C:\strawberry\c\bin\

Create dir:
md C:\strawberry\c\lib\lib--openssl-Orig

Move files
libeay32.a
libssl32.a
libssleay32.a
to
C:\strawberry\c\lib\lib--openssl-Orig\

Copy
C:\openssl\lib\*.a
( i.e.
libcrypto.a
libcrypto.dll.a
libssl.a
libssl.dll.a
)
to
C:\strawberry\c\lib\

Copy
C:\OpenSSL\lib\pkgconfig\*.pc
( i.e.
libcrypto.pc
libssl.pc
openssl.pc
)
to
C:\strawberry\c\lib\pkgconfig\

Run:
cpanp i IPC::Run

De-install old version
cpanp u Crypt::SSLeay

Download and extract module by run:

cpanp z Crypt::SSLeay

Not close command line, but run editor as another process

Open C:\strawberry\cpanplus\5.12.3\build\Crypt-SSLeay-0.58\Makefile.PL in editor
replace
==
-lssleay32 -llibeay32
==
to
==
-lssl -lcrypto
==

Save file Makefile.PL

Swith to cpanp process and run:

cpanp i

Exit from cpan shell by run:
Exit

P.S.

Net::SSLeay fix:

Download and extract module by run:

cpanp z Net::SSLeay

Not close command line, but run editor as another process

Open C:\strawberry\cpanplus\5.12.3\build\Net-SSLeay-1.36\inc\Module\Install\PRIVATE\Net\SSLeay.pm in editor
replace
==
ssleay32 libssl32
==
to
==
ssl crypto
==

Save file.

Swith to cpanp process and run:

cpanp i

Exit from cpan shell by run:
Exit

P.P.S.

After upgrade not need fix:
Crypt::OpenSSL::AES
Crypt::OpenSSL::RSA

i.e. this not need:


===

Download and extract Crypt-OpenSSL-AES-0.02.tar.gz by run:

cpanp z Crypt::OpenSSL::AES

Not close command line, but run editor as another process

Open C:\strawberry\cpanplus\5.12.3\build\Crypt-OpenSSL-AES-0.02\Makefile.PL in editor
replace
==
LIBS => ['-lcrypto'], # e.g., '-lm'
==
to
==
LIBS => ($^O eq 'MSWin32') ? ['-leay32'] : ['-lcrypto'],
==

Save file Makefile.PL

Swith to cpanp process and run:
cpanp i .

Exit from cpan shell by run:
Exit

Download and extract Crypt-OpenSSL-Random-0.04_patched.tar.gz by run:
cpanp i http://strawberryperl.com/package/kmx/perl-modules-patched/Crypt-OpenSSL-Random-0.04_patched.tar.gz

# {
# Old Var
#

Download and extract Crypt-OpenSSL-Random-0.04.tar.gz by run:

cpanp z Crypt::OpenSSL::Random

Not close command line, but run editor as another process

Open C:\strawberry\cpanplus\5.12.3\build\Crypt-OpenSSL-Random-0.04\Makefile.PL in editor
replace
==
'LIBS' => ['-lssl -lcrypto'], # e.g., '-lm'
==
to
==
'LIBS' => ($^O eq 'MSWin32') ? ['-lssl32 -leay32'] : ['-lssl -lcrypto'],
==

as described in

http://www.nntp.perl.org/group/perl.win32.vanilla/2010/04/msg219.html

===
...
you need to patch Makefile.PL (for both Crypt-OpenSSL-Random and Crypt-OpenSSL-RSA) in this way:

- 'LIBS' => ['-lssl -lcrypto'],
+ 'LIBS' => ($^O eq 'MSWin32') ? ['-lssl32 -leay32'] : ['-lssl -lcrypto'],
...
===

Save file Makefile.PL

Swith to cpanp process and run:
perl Makefile.PL
dmake
dmake test
dmake install

Exit from cpan shell by run:
Exit

#
#
# }

Download and extract Crypt-OpenSSL-RSA-0.26_patched.tar.gz by run:
cpanp i http://strawberryperl.com/package/kmx/perl-modules-patched/Crypt-OpenSSL-RSA-0.26_patched.tar.gz

# {
# Old Var
#

Download and extract Crypt-OpenSSL-RSA-0.26.tar.gz by run:

cpanp z Crypt::OpenSSL::RSA

Not close command line, but run editor as another process

Open C:\strawberry\cpanplus\5.12.3\build\Crypt-OpenSSL-RSA-0.26\Makefile.PL in editor
replace
==
'LIBS' => ['-lssl -lcrypto'], # e.g., '-lm'
==
to
==
'LIBS' => ($^O eq 'MSWin32') ? ['-lssl32 -leay32'] : ['-lssl -lcrypto'],
==

Save file Makefile.PL

Swith to cpanp process and run:
perl Makefile.PL
dmake
dmake test
dmake install

Exit from cpan shell by run:
Exit

#
#
# }
===

This

==
cpanp i Crypt::OpenSSL::AES
cpanp i Crypt::OpenSSL::RSA
==

work as need.

—————————–

2011-06-02 13-02:

http://www.mail-archive.com/win32-vanilla@perl.org/msg00301.html


===
----- Original Message -----
From: "Victor Miasnikov"
To: win32-vanilla(at)perl.org
Sent: Thursday, June 02, 2011 1:02 PM
Subject: Which way is the true way, and what not? "-lssleay32 -llibeay32" Way? Or "-lssl -lcrypto" Way? Fw: HowTo: Strawberry Perl v5.12.3 x64 upgrade to OpenSSL v1.0.0d from "OpenSSL 1.0.0-beta4"

Hi!

Which way is the true way, and what not? "-lssleay32 -llibeay32" Way? Or "-lssl -lcrypto" Way?

--

a) "-lssleay32 -llibeay32" Way:

At this moment in strawberry-perl-5.12.3.0-64bit / 5.12.2.0 and in 64bit_openssl-1.0.0d-bin_20110507.zip :
==
libeay32__.dll
ssleay32__.dll
libeay32.a
libssl32.a
libssleay32.a
==

In Makefile.PL need use "-lssleay32 -llibeay32"

need fix in:
Crypt::OpenSSL::AES
Crypt::OpenSSL::RSA
Crypt::OpenSSL::Random

etc.

http://www.perlmonks.org/?node_id=815160

==
by syphilis (Abbot)
on Jan 01, 2010 at 08:20 UTC

I certainly didn't expect Strawberry to go with *that* naming convention for their openssl libraries.
I expected they would stick with the more general '-lssl -lcrypto' nomenclature (which is what mingw builds for native win32 in the msys shell) .... but I was wrong.
I guess they have good reason(s) for doing that.
==

b) "-lssl -lcrypto" Way:
HowTo: Strawberry Perl v5.12.3 x64 upgrade to OpenSSL v1.0.0d from "OpenSSL 1.0.0-beta4"

http://vvm.blog.tut.by/2011/06/01/howto-strawberry-perl-v5-12-3-x64-upgrade-to-openssl-v1-0-0d-from-openssl-1-0-0-beta4/

==
. . .
MSYS-20110526.zip
from

http://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20%28Win64%20hosted%29/MSYS%20%2832-bit%29/

. . .
ftp://ftp.openssl.org/source/openssl-1.0.0d.tar.gz
. . .
tar xfhz openssl-1.0.0d.tar.gz
. . .
cd /openssl-1.0.0d

Run:
./configure mingw64 shared no-asm no-hw --openssldir=/openssl
make
make test
make install
. . .
==

The result of compilation:
==
libeay32.dll
ssleay32.dll
libcrypto.a
libcrypto.dll.a
libssl.a
libssl.dll.a
==

In Makefile.PL need use "-lssl -lcrypto"

need fix in:
Crypt::SSLeay
Net::SSLeay

but not need fix in:
Crypt::OpenSSL::AES
Crypt::OpenSSL::RSA
Crypt::OpenSSL::Random

I.e. fixed

http://www.mail-archive.com/win32-vanilla@perl.org/msg00217.html

==
kmx
Sat, 10 Apr 2010 00:20:41 -0700
. . .
I have created the following bug reports:
1/ http://rt.cpan.org/Public/Bug/Display.html?id=56454
2/ http://rt.cpan.org/Public/Bug/Display.html?id=56455
feel free to post some supportive comments to those RTs
==

Which way is the true way, and what not? "-lssleay32 -llibeay32" Way? Or "-lssl -lcrypto" Way?

Best regards, Victor Miasnikov
===




















http://www.mail-archive.com/win32-vanilla@perl.org/msg00302.html


===
----- Original Message -----
From: "kmx"
To: win32-vanilla(at)perl.org
Sent: Thursday, June 02, 2011 1:59 PM
Subject: Re: Which way is the true way, and what not? "-lssleay32 -llibeay32" Way? Or "-lssl -lcrypto" Way? Fw: HowTo: Strawberry Perl v5.12.3 x64 upgrade to OpenSSL v1.0.0d from "OpenSSL 1.0.0-beta4"

Hi Victor,

> a) "-lssleay32 -llibeay32" Way:
>
> At this moment in strawberry-perl-5.12.3.0-64bit / 5.12.2.0 and in 64bit_openssl-1.0.0d-bin_20110507.zip :
> ==
> libeay32__.dll
> ssleay32__.dll
> libeay32.a
> libssl32.a
> libssleay32.a
> ==

I can give an explanation as I have prepared this part of strawberry perl.

a/ libeay32.a (+libeay32__.dll) is analogy for UNIXish -lcrypto

b/ libssl32.a == libssleay32.a (+ssleay32__.dll) is analogy for UNIXish -lssl

The trouble is that openssl has 2 different way for building MSWindows/gcc
libraries - one via Configure+make; the second via mingw32.bat.
Unfortunately each way creates *.a files with different names

*/ Configure+make creates
- libcrypto.dll.a
- libcrypto.a
- libssl.dll.a
- libssl.a

*/ mingw32.bat creates
- libeay32.a (= libcrypto.dll.a)
- libcrypto.a
- libssl32.a (= libssl.dll.a)
- libssl.a

On top of that you have also MS compiler (cl/msvc) in MS Windows world
which uses also different library names: libeay32*.lib ssleay32*.lib (from
here probably comes "-lssleay32 -llibeay32" which should be fine with MS
compiler)

Things get a little bit more complicated by the fact that the more-or-less
official openssl Win32 binaries distribution (see
http://www.openssl.org/related/binaries.html) contains also mingw/gcc *.a
libraries - however named: libeay32.a + ssleay32.a (which does not
correspond to the results produced by the mingw.bat from official openssl
tarball). Please note that ssleay32.a is not libssleay32.a thus linker will
not find it when given -lssleay32 - this is IMHO the main source of
confusion about the right lib names.

What we have done in strawberry was to use naming convention
libeay32.a/libssl32.a + a little trick to copy libssl32.a to libssleay32.a
- at that time it seemed to be a way how to satisfy most of the modules on
cpan using different -lssleay32/-lssl32/-leay32 linker options

I do not feel to have an authority to say what is the best/right/correct
way but I would keep the naming convention of the original openssl
distribution and use: -lssl32 -leay32 for MSWindows+gcc compiler (which
works with openssl included in strawberry perl however not with *.a mingw
libraries that are part of the openssl Win32 binaries distribution).

--
kmx
===




















http://www.mail-archive.com/win32-vanilla@perl.org/msg00303.html


===
----- Original Message -----
From: "Victor Miasnikov"
To: "kmx" ; win32-vanilla(at)perl.org
Sent: Thursday, June 02, 2011 4:29 PM
Subject: Re: Which way is the true way, and what not? "-lssleay32 -llibeay32" Way? Or "-lssl -lcrypto" Way? Fw: HowTo: Strawberry Perl v5.12.3 x64 upgrade to OpenSSL v1.0.0d from "OpenSSL 1.0.0-beta4"

Hi!

> The trouble is that openssl has 2 different way for building MSWindows/gcc libraries
> - one via Configure+make;
> the second via mingw32.bat.

> . . . the more-or-less official openssl Win32 binaries distribution
> (see http://www.openssl.org/related/binaries.html) contains also
>mingw/gcc *.a libraries - however named: libeay32.a + ssleay32.a . . .

Well . . .

We will go step by step:

The practical question: .dll / .lib files from 64bit_openssl-1.0.0d-bin_20110507.zip build via Configure + make?
Or with mingw32.bat? Or copy from "openssl Win32 binaries distribution"?

Question N2: where to download / get / take openssl.cnf for OpenSSL from *_20110507.zip?

Best regards, Victor Miasnikov
===





















Upgrade Strawberry Perl v5.12.3.0 x64 ( strawberry-perl-5.12.3.0-64bit.zip) library to kmx/64_libs/5.12/*.zip:

Download:

http://strawberryperl.com/download/5.12.3.0/strawberry-perl-5.12.3.0-64bit.zip

unpack it to
c:\sb\

Save to c:\sb\portableshell.bat :
==
@echo off
set drive=%~dp0
set drivep=%drive%
If $#\#$==$#%drive:~-1%#$ set drivep=%drive:~0,-1%
set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%
set TERM=dumb
echo ----------------------------------------------
echo Welcome to Strawberry Perl Portable Edition!
echo * URL - http://www.strawberryperl.com/
echo * see README.portable.TXT for more info
echo ----------------------------------------------
perl -e "printf("""Perl executable: %%s\nPerl version : %%vd\n""", $^X, $^V)" 2>nul
if ERRORLEVEL==1 echo.&echo FATAL ERROR: 'perl' does not work; check if your strawberry pack is complete!
echo.
cmd
==

#{
# Old:
#
Download:

http://strawberryperl.com/download/5.12.3.0/strawberry-perl-5.12.3.0-portable.zip

unpack only portableshell.bat from it to
c:\sb\
#
#
#}

Run:
portableshell.bat

In portableshell.bat shell:

set PERL_MM_USE_DEFAULT=1

cpanp s save system
===
C:\sb>cpanp s save system
Configuration successfully saved to CPANPLUS::Config::System
(C:\sb\perl\lib\CPANPLUS\Config\System.pm)
===

cpanp s edit system

Replace
strawberryperl to sb
==
$conf->set_conf( base => 'C:\\sb\\cpanplus' );
==

If found:
==
$conf->set_conf( signature => 1 );
==
replace to
==
$conf->set_conf( signature => 0 );
==

Save file.

cpanp i IPC::Run

cpanp i Perl::Dist::Strawberry

cpanp i Perl::Dist::WiX::BuildPerl::5123
cpanp i Perl::Dist::Strawberry::BuildPerl::5123

GoTo:
C:\sb\perl\site\lib\Perl\Dist\Strawberry\

rename
Libraries.pm
to
Libraries.pm.Orig

apply patch to Libraries.pm:
===
--- Libraries.pm.Orig Tue Jun 07 15:50:35 2011
+++ Libraries.pm Tue Jun 07 16:35:51 2011
@@ -127,6 +127,9 @@
'freeglut' => '32bit-gcc4/freeglut-2.6.0-bin_20100213.zip',
'libssh2' => '32bit-gcc4/libssh2-1.2.5-bin_20100520.zip',
},
+#{ VVM 2011-06-07 16-35
+#
+#
'64bit-gcc4' => {
'patch' => '64bit-gcc4/patch-2.5.9-7-bin_20100110_20100303.zip',
'mysql589' => undef,
@@ -146,29 +149,34 @@
'pari5121' => undef,
'pari5122' => undef,
'pari5123' => undef,
- 'zlib' => '64bit-gcc4/zlib-1.2.3-bin_20100110.zip',
- 'libiconv' => '64bit-gcc4/libiconv-1.13.1-bin_20100110.zip',
- 'libxml2' => '64bit-gcc4/libxml2-2.7.3-bin_20100110.zip',
- 'libexpat' => '64bit-gcc4/expat-2.0.1-bin_20100110.zip',
- 'gmp' => '64bit-gcc4/gmp-5.0.1-419f6a4cc606-bin_20100306.zip',
- 'libxslt' => '64bit-gcc4/libxslt-1.1.26-bin_20100111.zip',
- 'libjpeg' => '64bit-gcc4/jpeg-6b-gnuwin32-bin_20100110.zip',
- 'libgif' => '64bit-gcc4/giflib-4.1.6-bin_20100110.zip',
- 'libpng' => '64bit-gcc4/libpng-1.2.40-bin_20100110.zip',
- 'libtiff' => '64bit-gcc4/tiff-3.9.1-bin_20100110.zip',
- 'libgd' => '64bit-gcc4/gd-2.0.35-bin_20100110.zip',
- 'libfreetype' => '64bit-gcc4/freetype-2.3.11-bin_20100110.zip',
- 'libopenssl' => '64bit-gcc4/openssl-1.0.0-beta4-bin_20100110.zip',
- 'libpostgresql' => '64bit-gcc4/postgresql-8.4.1-bin_20100110.zip',
- 'libdb' => '64bit-gcc4/db-4.8.24-bin_20100110.zip',
- 'libgdbm' => '64bit-gcc4/gdbm-1.8.3-bin_20100112.zip',
- 'libxpm' => '64bit-gcc4/libXpm-3.5.8-bin_20100110.zip',
- 'libxz' => '64bit-gcc4/liblzma-xz-4.999.9beta-bin_20100308.zip',
- 'mpc' => '64bit-gcc4/mpc-0.8.1-bin_20100306.zip',
- 'mpfr' => '64bit-gcc4/mpfr-2.4.2-bin_20100306.zip',
- 'libmysql' => '64bit-gcc4/mysql-5.1.44-bin_20100304.zip',
- 'freeglut' => '64bit-gcc4/freeglut-2.6.0-bin_20100213.zip',
- 'libssh2' => '64bit-gcc4/libssh2-1.2.5-bin_20100520.zip',
+ 'zlib' => 'kmx/64_libs/5.12/64bit_zlib-1.2.5-bin_20110507.zip',
+ 'libiconv' => 'kmx/64_libs/5.12/64bit_libiconv-1.13.1-sezero20110428-bin_20110507.zip',
+ 'libxml2' => 'kmx/64_libs/5.12/64bit_libxml2-2.7.8-bin_20110507.zip',
+ 'libexpat' => 'kmx/64_libs/5.12/64bit_expat-2.0.1-sezero20110428-bin_20110507.zip',
+ 'gmp' => 'kmx/64_libs/5.12/64bit_gmp-5.0.1-bin_20110507.zip',
+ 'libxslt' => 'kmx/64_libs/5.12/64bit_libxslt-1.1.26-bin_20110507.zip',
+ 'libjpeg' => 'kmx/64_libs/5.12/64bit_jpeg-8c-bin_20110507.zip',
+ 'libgif' => 'kmx/64_libs/5.12/64bit_giflib-4.1.6-bin_20110507.zip',
+ 'libpng' => 'kmx/64_libs/5.12/64bit_libpng-1.5.2-bin_20110507.zip',
+ 'libtiff' => 'kmx/64_libs/5.12/64bit_tiff-3.9.5-bin_20110507.zip',
+ 'libgd' => 'kmx/64_libs/5.12/64bit_gd-2.0.35(OLD-jpg-png)-bin_20110507.zip',
+ 'libfreetype' => 'kmx/64_libs/5.12/64bit_freetype-2.4.4-bin_20110507.zip',
+ 'libopenssl' => 'kmx/64_libs/5.12/64bit_openssl-1.0.0d-bin_20110507.zip',
+ 'libpostgresql' => 'kmx/64_libs/5.12/64bit_postgresql-9.0.4-bin_20110507.zip',
+ 'libdb' => 'kmx/64_libs/5.12/64bit_db-5.1.25-bin_20110507.zip',
+ 'libgdbm' => 'kmx/64_libs/5.12/64bit_gdbm-1.8.3-bin_20110507.zip',
+ 'libxpm' => 'kmx/64_libs/5.12/64bit_libXpm-3.5.9-bin_20110507.zip',
+ 'libxz' => 'kmx/64_libs/5.12/64bit_xz-5.0.2-bin_20110507.zip',
+ 'mpc' => 'kmx/64_libs/5.12/64bit_mpc-0.9-bin_20110507.zip',
+ 'mpfr' => 'kmx/64_libs/5.12/64bit_mpfr-3.0.1-bin_20110507.zip',
+ 'libmysql' => 'kmx/64_libs/5.12/64bit_mysql-5.1.44-bin_20100304.zip',
+ 'freeglut' => 'kmx/64_libs/5.12/64bit_freeglut-2.6.0-bin_20110507.zip',
+ 'libssh2' => 'kmx/64_libs/5.12/64bit_libssh2-1.2.8-bin_20110507.zip',
+#
+#
+#}
+
},
};
===

GoTo:
C:\sb\perl\site\lib\Perl\Dist\

rename
WiX.pm
to
WiX.pm.Orig

apply patch to WiX.pm:

===
>diff -u WiX.pm.Orig WiX.pm
--- WiX.pm.Orig Sun Jun 05 15:17:58 2011
+++ WiX.pm Tue Jun 07 17:23:36 2011
@@ -725,16 +725,16 @@
isa => subtype(
'Int' => where {
if ( not defined $_ ) {
- $_ = 32;
+ $_ = 64;
}

- $_ == 32 or $_ == 64;
+ $_ == 64 or $_ == 64;
},
message {
'Not 32 or 64-bit';
},
),
- default => 32,
+ default => 64,
);
===

Run

%SystemRoot%\system32\cmd.exe /c C:\sb\perl\site\bin\perldist_strawberry.bat --output C:\strawberry --skip 1 --skip 2 --skip 3

# { Or
#%SystemRoot%\system32\cmd.exe /c C:\sb\perl\bin\perl.exe -x -S perldist_strawberry.pl --output C:\strawberry --skip 1 --skip 2 --skip 3
# }

Go to directory:
C:\tmp\output\

rename strawberry-perl-5.12.3.0-64bit.msi strawberry-perl-5.12.3.0-64bit-build-2011-06-07.msi
rename strawberry-perl-5.12.3.0-64bit.zip strawberry-perl-5.12.3.0-64bit-build-2011-06-07.zip

Copy this files from C:\tmp\

Leave a Reply

*
Для того, чтобы убедиться что Вы человек, а не спам-бот, введите пожалуйста ответ.
Анти-спам выражение.

Copyright © 2013 Виктор Мясников ( Victor Miasnikov). Search Engine Optimization by Star Nine. Distributed by Wordpress Themes
Хостинг hoster.by   Сервис белорусских блогов: BLOGS.TUT.BY