Thursday, September 10, 2009

CentOS 5.2 - Missing Dependency: kernel-headers

If you have troubles with kernel-headers in CentOS 5.2 like:
Error: Missing Dependency: kernel-headers is needed by package glibc-headers
Error: Missing Dependency: kernel-headers >= 2.2.1 is needed by package glibc-headers

install kernel headers:
#uname -a
Linux myserver 2.6.18-92.1.18.el5 #1 SMP Wed Nov 12 09:19:49 EST 2008 x86_64

for x86_64
#wget http://vault.centos.org/5.2/os/x86_64/CentOS/kernel-headers-2.6.18-92.el5.x86_64.rpm
#rpm -i kernel-headers-2.6.18-92.el5.x86_64.rpm

for i386
#wget http://vault.centos.org/5.2/os/i386/CentOS/kernel-headers-2.6.18-92.el5.i386.rpm
#rpm -i kernel-headers-2.6.18-92.el5.i386.rpm

Wednesday, September 2, 2009

Enable mysql replication on production server

How to add slave mysql server without stopping master?

Bin-logging must be enabled on master. Then just dump all data from master:
mysqldump  --defaults-file=/etc/mysql/debian.cnf -BA --master-data | gzip > /pathtogzipfile/filename
This command dump all data from master and store master "binlog filename" and log position.

Copy gzipped dump to slave. Ungzip and apply (mysql < yourfile.sql). Execute "slave start;" (slave must be configured for replication before this step :)

Saturday, August 1, 2009

keep in mind

#echo "1 2 3 4 5 6 7" |awk '{print $3, $NF}'
3 7

Friday, July 31, 2009

apache fail

Don't use apache2-mpm-worker for perl projects. Never!

never

NEVER! :)

Wednesday, July 22, 2009

nginx basic auth (htpasswd)

Nginx supports basic auth (ngx_http_auth_basic_module)

directives:
auth_basic [|off]
auth_basic_user_file path/to/file

htpasswd file format:
# comment
login:password

Command htpasswd should be used with option -d , because nginx supports crypt() algorithm only.

Example:
htpasswd -c -d /etc/nginx/htpasswd asalnikov

nginx.conf part:
location /
{
auth_basic "closed site";
auth_basic_user_file /etc/nginx/htpasswd;
...
}

Sunday, July 12, 2009

Kubuntu Jaunty Wi-Fi Speed with WPA2 encryption

After upgrading my Kubuntu to Jaunty, I had problems with Internet access via Wi-Fi. Speed was many times less than before the upgrade (only then I use WPA2 encryption). This way solve the problem:

$ sudo aptitude install linux-image-2.6.28-11-generic

and reboot, choosing this kernel

P.S. in KDE4, NetworkManager replaced by plasma-widget-network-manager. If you can't connect to your wi-fi network with WPA2 encryption just install "linux-backports-modules-jaunty-generic" package.

Thursday, July 9, 2009

ssh tunnels

In many cases, development projects are on the same data center, and the server product is on the other. And often it is necessary to provide the link between the test and product servers.

Simply ssh tunnel:

ssh -p40088 -2 -N -C -f -L 172.11.5.58:3307:10.20.1.103:3306 tunnel@x.x.x.x

-p40088 - gateway to production DC ssh port
172.11.5.58:3307 - host:port on local server
10.20.1.103:3306 - host:port on remote server
tunnel@x.x.x.x - username@host of gateway to production DC


And now when I connect to port 3307 on local server I get connect with 10.20.1.103:3306 on production server.

Monday, July 6, 2009

How to copy directories structure

cd olddir
find . -type d > /tmp/dirlist
cd newdir
for i in `cat /tmp/dirlist` ; do mkdir -p $i ; done

very simply :)

Tuesday, June 30, 2009

Nginx rewrite for user subdomains

For example you need to store few userpics for each user with possibility to set default userpic. First we must determine that for static content we will use nginx as one of the fastest web server. Userpics will be stored by scheme: "files/userpics/[first two letters from username]/[username]/"
directories scheme:

root@server:~# tree files
files
`-- userpics
|-- te
| |-- test11
| | |-- 0.gif
| | |-- 1246347162.gif
| | |-- 1246362446.jpg
| | `-- 1246363739.gif
| `-- test44
| |-- 0.gif
| |-- 1246365659.gif
| `-- 1246366597.gif
`-- tu
|-- turkish
| |-- 0.gif
| |-- 1246357650.gif
| |-- 1246357669.gif
| `-- 1246363992.gif
`-- tuzik
|-- 0.jpg
|-- 1246365938.jpg
`-- 1246365974.jpg


Default userpic will be addressed to 0.[jpg|png|gif] (file extension depends on extension the parent file)
Http request http://test11.mydomain.com/userpics/1246347162.gif must return this file:
/opt/www/files/userpics/te/test11/1246347162.gif
if file does not exist, nginx must return default userpic for this user:
/opt/www/files/userpics/te/test11/0.[jpg|png|gif]
if default userpic does not exist, nginx return default userpic for all users "/userpic-default.png"

part of nginx.conf:

location /userpics/ {
default_type image/jpeg;
root /opt/www;
access_log /var/log/nginx/static.access.log main;
if ($host ~* "(..)(.*)\.mydomain\.com") {
set $a $1;
set $b $2;
rewrite ^/userpics/(.*)$ /files/userpics/$a/$a$b/$1;
}
if (!-f $request_filename) {
rewrite ^/files/userpics/(.*)$ /files/userpics/$a/$a$b/0.jpg;
}
if (!-f $request_filename) {
rewrite ^/files/userpics/(.*)$ /files/userpics/$a/$a$b/0.gif;
}
if (!-f $request_filename) {
rewrite ^/files/userpics/(.*)$ /files/userpics/$a/$a$b/0.png;
}

break;
error_page 404 =200 /userpic-default.png;

}

UPD Best way: don't use "if" in location level.
try_files /files/userpics/$a/$a$b/0.jpg /files/userpics/$a/$a$b/0.gif /files/userpics/$a/$a$b/0.png /userpic-default.png;

Thursday, June 25, 2009

regular expressions

Some tips about regular expressions:
(..) - two symbols
([0-9]{4}) - 4 numeric symbols
([a-c]+) - letters from a to c. many times as you like
(.*) - any symbols. many times as you like

A bit later I'll write about useful rewrite :)

Monday, June 22, 2009

Disable Midnight Commander tab and spaces highlighting

In file ~/.mc/ini check these parameters
editor_visible_tabs = 0
editor_visible_spaces = 0
They must be equal "0"