All posts by amri

Инсталиране на eaccelerator под Debian Lenny

Синтезирано ръководство за инсталиране на eAccelerator под Debian Lenny

apt-get update && apt-get install build-essential php5-dev bzip2
cd /tmp/
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar xvjf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
phpize
./configure

make && make install
vim /etc/php5/conf.d/eaccelerator.ini

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Bash трик (replace string)

Идеята е в една директория с 1000 файла да се замени стринга "RIBA" с "KOSTUR" и в место да се прави на ръка се прави с един ред:

find $PWD -type f -exec sed -i 's/RIBA/KOSTUR/g' {} \;

find . -name '*.php' -print0 |
xargs -0 -n 1 sed -i -e "s|OLD|NEW|g"

VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Debian squeeze- VMware грешки

При пускане на VMware Player 3.1.3 build-324285(VMware WorkStation 7.1.3 build-324285)  излизат следните грешки:

Грешка 1.

Could not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module `vmmon' is loaded.
Failed to initialize monitor device.

Решение 1.

modprobe vmmon

Грешка 2.

Failed to open device "/dev/vmci": No such file or directory
Please make sure that the kernel module 'vmci' is loaded.
Module DevicePowerOn power on failed.

Решение 2.

modprobe vmci

Грешка 3.

Cannot open file dndlog.conf: No such file or directory

Решение 3.

mkdir ~/.vmware/dndlogs
touch ~/.vmware/dndlogs/dndlog.conf

Грешка 4.

Could not connect Ethernet0 to virtual network "/dev/vmnet8"
More information can be found in the vmware.log file. Virtual device Ethernet0 will start disconnected.

или

VNET: MACVNetPortOpenDevice: Ethernet0: can't open vmnet device (No such file or directory) във vmware.log

Решение 4.

modprobe vmnet

Общо решение

Тези грешки възникват защото не са заредени необходимите модули:
Решението е просто да се заредят :)))

echo "vmmon" >> /etc/modules
echo "vmci" >> /etc/modules
echo "vmnet" >> /etc/modules

При необходимост модулите да бъдат заредени веднага се прави следното :) :

modprobe vmmon;modprobe vmci;modprobe vmnet;

С това "Общо решение" модулите  ще бъдат заредени след reboot на машината.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Mplayer под Debian Squeeze

1. Хранилище в /etc/apt/sources.list

deb http://www.debian-multimedia.org squeeze main non-free

2. Инсталиране на keyring-a

apt-get update && apt-get install debian-multimedia-keyring --force-yes --

3. Инсталиране на mplayer. Умишлено първо го премахвам и после го инсталирам понеже на доста хора се е слувало следното: Инсталират си mplayer от basic хранилищата на дистрото и когато искат да го ъпдейтнат от debian-multimedia се получават куп грешки. Когато се премахне и след това инсталира работи супер всичко :)

apt-get remove mplayer && apt-get install mplayer

Бележка: Ето я грешката която излиза когато се ъпдейт MPlayer от debian-multimedia:

Preparing to replace mplayer 2:1.0~rc3++final.dfsg1-1 (using …/mplayer_2%3a1.0~rc3++svn20100804-0.2_i386.deb) …
Unpacking replacement mplayer …
dpkg: error processing /var/cache/apt/archives/mplayer_2%3a1.0~rc3++svn20100804-0.2_i386.deb (--unpack):
trying to overwrite '/usr/share/pixmaps/mplayer.xpm', which is also in package mplayer-gui 2:1.0~rc3++final.dfsg1-1
configured to not write apport reports
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Processing triggers for menu …
Errors were encountered while processing:
/var/cache/apt/archives/mplayer_2%3a1.0~rc3++svn20100804-0.2_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Инсталиране на Ndivida / Compiz Fusion на Debian Squeeze

1. Добавяне на хранилища /etc/apt/sources.list

deb http://ftp.de.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.de.debian.org/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

deb http://ftp.de.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian/ squeeze-updates main contrib non-free

2. Инсталиране на необходимите пакети

apt-get update && apt-get install compiz compizconfig-settings-manager compiz-fusion-plugins-main compiz-gnome compiz-gtk fusion-icon compiz-fusion-plugins-extra compiz-fusion-plugins-unsupported nvidia-glx nvidia-xconfig nvidia-kernel-dkms nvidia-settings

3. Рестартиране на системата

reboot

4. Преглед дали модулите са заредени успешно

lsmod | grep -i nvidia

Изхода е подобен на този:
nvidia               9842520  31
i2c_core               12787  3 videodev,nvidia,i2c_i801

Сега остава да се конфигурира и xorg.conf

5. Спиране на Гном

/etc/init.d/gdm3 stop

6. Alt + F2 и логин като root

X -configure
mv ~/xorg.conf.new /etc/X11/xorg.conf
nvidia-xconfig

7. vi /etc/X11/xorg.conf

Добавяне на тази секция

[…]
Section "Extensions"
Option "Composite" "enable"
EndSection
[…]

Добавяне в секция "Device"

[…]
Option "AllowGLXWithComposite" "true"
Option "TripleBuffer" "true"
Option "XAANoOffscreenPixmaps" "true"
Option "RenderAccel" "true"
[…]

в секция "Screen"

[…]
Option "AddARGBGLXVisuals" "true"
Option "AddARGBVisuals" "true"
[…]

Работещ конфигурационен xorg.conf файл(това е лично за моята машина т.е. не означава, че ще работи на всяка)

#@#:~$ cat /etc/X11/xorg.conf
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 1.0  (buildd@barber)  Sun Jun 13 12:08:56 UTC 2010

Section "ServerLayout"
Identifier     "X.org Configured"
Screen      0  "Screen0" 0 0
InputDevice    "Mouse0" "CorePointer"
InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
ModulePath      "/usr/lib/xorg/modules"
FontPath        "/usr/share/fonts/X11/misc"
FontPath        "/usr/share/fonts/X11/cyrillic"
FontPath        "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath        "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath        "/usr/share/fonts/X11/Type1"
FontPath        "/usr/share/fonts/X11/100dpi"
FontPath        "/usr/share/fonts/X11/75dpi"
FontPath        "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
FontPath        "built-ins"
EndSection

Section "Module"
Load           "record"
Load           "dri2"
Load           "dbe"
Load           "extmod"
Load           "glx"
EndSection

Section "InputDevice"
Identifier     "Keyboard0"
Driver         "kbd"
EndSection

Section "InputDevice"
Identifier     "Mouse0"
Driver         "mouse"
Option         "Protocol" "auto"
Option         "Device" "/dev/input/mice"
Option         "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
Identifier     "Monitor0"
VendorName     "Monitor Vendor"
ModelName      "Monitor Model"
EndSection

Section "Extensions"
Option "Composite" "enable"
EndSection

Section "Device"

### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option     "SWcursor"                   # [<bool>]
#Option     "HWcursor"                   # [<bool>]
#Option     "NoAccel"                    # [<bool>]
#Option     "ShadowFB"                   # [<bool>]
#Option     "VideoKey"                   # <i>
Identifier     "Card0"
Driver         "nvidia"
VendorName     "nVidia Corporation"
BoardName      "C77 [GeForce 8100 / nForce 720a]"
Option "AllowGLXWithComposite" "true"
Option "TripleBuffer" "true"
Option "XAANoOffscreenPixmaps" "true"
Option "RenderAccel" "true"
EndSection

Section "Screen"
Identifier     "Screen0"
Device         "Card0"
Monitor        "Monitor0"
Option "AddARGBGLXVisuals" "true"
Option "AddARGBVisuals" "true"
SubSection     "Display"
Viewport    0 0
EndSubSection
SubSection     "Display"
Viewport    0 0
Depth       4
EndSubSection
SubSection     "Display"
Viewport    0 0
Depth       8
EndSubSection
SubSection     "Display"
Viewport    0 0
Depth       15
EndSubSection
SubSection     "Display"
Viewport    0 0
Depth       16
EndSubSection
SubSection     "Display"
Viewport    0 0
Depth       24
EndSubSection
EndSection

8. Пускаме Гном

/etc/init.d/gdm3 start

9. Проверяваме дали сме готови за 3D ефектите:

glxinfo | grep direct

Изход:

direct rendering: Yes
GL_EXT_Cg_shader, GL_EXT_depth_bounds_test, GL_EXT_direct_state_access,

10. Стартиране на Compiz  и настройки:
Applications > System Tools > Compiz Fusion Icon:

Пълната статия може да бъде намерена в howtoforge .

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Piwik: "Fatal error: Allowed memory size"

В един момент забелязвам, че тоя Piwik не брой и тъкмо щях да го ругая, че е поредната боза, реших да го разгледам по- отблизо. Видях, че колектора които се изпълнява "WEBDIR/misc/cron/archive.sh" казва, че php-то което се изпълнява няма памет (ей това си е сериозна причина да кажа, че е пълна шит , но както и да е(да го напишат на perl)). Съответно когато излезе тази грешка излиза и отчита посещенията само на сайтовете преди тази грешка За да не променям глобалния php conf само заради тоя piwik едитнах колектора или по- точно на 45 ред добавих следното:

PHP_BIN="$PHP_BIN -d memory_limit=1300M";

Идеята е когато изпълнява php-то да добави този аргумент за да ползва повече памет(но докога ще бъде така …)

Когато се пусне отново ще колектне и архивира всички данни за всички сайтове(освен ако и тази памет не му стига :( ).

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

MySQL малък трик

Един малък трик за експорт на таблици от база с конкретен префикс. Понеже mysqldump не позволява това ползвам ето този трик:

mysqldump -uUSER -pPASS TABLE $(mysql -uUSER -pPASS -D TABLE -Bse "show tables like 'PREFIX_%'") > /tmp/DATABASE.sql

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Upgrade на Pligg от терминал

Upgrade на Pligg от terminal:

bf:# cat pligg_upgrader_executor.sh

#!/bin/bash
# DH Pligg Upgrader v 1.0 (Written by amri)

if [ "$#" -ne 2 ];
then
echo "Use arguments: install.sh PATH DOMAIN";exit;
fi;

PATH=$1;
DOMAIN=$2;
CP="/bin/cp";
UNZIP="/usr/bin/unzip";
RM="/bin/rm";
CURL="/usr/bin/curl";
CHMOD="/bin/chmod";
MV="/bin/mv";
WGET="/usr/bin/wget";

if [ ! -f "/tmp/latest.zip" ]
then
$WGET -q "http://pligg.com/downloads/latest/latest.zip" -O "/tmp/latest.zip";
fi;

if [ ! -d "$PATH" ]
then
echo "DIRECTORY $PATH NOT EXIST!";exit;
fi;

cd $PATH;
$CP /tmp/latest.zip . > /dev/null
$CP -Rvp templates templates.bak > /dev/null
$CP settings.php settings.php.bak > /dev/null
$CHMOD -R 777 modules languages cache settings.php > /dev/null
$UNZIP -o latest.zip > /dev/null
$CP -Rvp  templates.bak/* templates/ > /dev/null
$RM -fr templates.bak > /dev/null
$CHMOD -R 777 modules languages cache > /dev/null
($CURL -e "http://$DOMAIN/install/upgrade.php?language=local" -F 'submit=yes' "http://$DOMAIN/install/upgrade.php?language=local") 2> /dev/null > /dev/null;
$MV settings.php.bak settings.php > /dev/null
$RM -fr settings.php.default libs/dbconnect.php.default install/ latest.zip > /dev/null
echo "[    OK    ]";

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Сравнително добро заместване на "order by rand()" в MySQL

Метод 1

select @rand:=CEIL(MAX(uid)*RAND()) AS uid from tablica;select ddate,title,url,visits from tablica where uid>=@rand order by uid limit 10;

Метод 2

SELECT uid,ddate,title,url,visits  FROM tablica T JOIN (SELECT FLOOR(MAX(uid)*RAND()-1024) AS ID FROM tablica) AS x ON T.uid >= x.ID LIMIT 10;

Метод 3

SELECT uid,ddate,title,url,visits FROM tablica T JOIN (SELECT MAX(uid) AS ID FROM tablica) AS x ON T.uid >= FLOOR(x.ID*RAND()) LIMIT 10;

Метод 4

SELECT uid,ddate,title,url,visits FROM tablica t JOIN (SELECT(FLOOR(max(uid) * rand())) as maxid FROM tablica) as tt on t.uid >= tt.maxid LIMIT 10;

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Машини за съхранение в MySQL

MySQL предоставя избор между няколко машини за съхранение (storage engines) при създаване на таблица. Различните типове таблици се управляват от различни машини за съхранение, всяка от които има собствени, специфични характеристики.

Ето няколко машини за съхранение:

Машина за съхранение MyISAM
Машина за съхранение MERGE
Машина за съхранение InnoDB
Машина за съхранение MEMORY
Машина за съхранение FEDERATED

Всички таблици, които се управляват от съръва на MySQL , имат редица общи особености. Например всяка таблица в базата данни притежава файл във формата (.frm) в директорията за бази данни. Той съхранява дефиницията за структурата на таблицата и се създава от сървъра. Таблиците имат помежду си и редица различия, които са тясно свързани с машините за съхранение, които сървърът използва за управление на съдържанието им. Всяка от тях има собствен набор от функционални характеристики. Например някои машини създават допълнителни файлове на твърдия диск за управление на данни и за съхранение на индекси, които придружават тези с разширение frm, но типовете им се различават в зависимост от съответната машина за съхранение. Последните се различават и по други особености, например по начина, по който използват заключване за контролиране на съревнованието между заявките, както и по вида на таблиците, които осигуряват: те могат да бъдат транзакционни и нетранзакционни. Споменатите свойства на машините за съхранение имат съществено значение за производителността при обработката на заявки, за контролиране на съревнованието между тях, както и за предотвратяване на т.нар. “мъртва хватка” (Тя се получава в резултат от блокиране на голям брой заявки, които не могат да продължат изпълнението си, тъй като всяка от тях изчаква приключването на останалите).

При създаване на таблица можете да изберете коя машина за съхранение да използвате. Обикновено при избора се гледа коя от тях предлага възможности, които най-добре отговарят на нуждите на конкретното приложение. Преди да направите избора си, трябва да отговорите на въпроса за какъв тип заявки възнамерявате да използвате съответната таблица. След това изберете машина за съхранение, която използва подходящо ниво на заключване. Заключването на ниво таблица, което се използва от MyISAM, работи най-ефективно при комбинации от заявки, осъществяващи интензивно извличане на данни и малко на брой актуализации. Ако желаете да обработвате комбинации от заявки, включващи множество актуализации, е далеч по-добре да използвате innoDB. За нея е характерно заключване на ниво ред и поддържане на множество версии, което осигурява отлична съгласуваност при комбинация от извличане и актуализации на данни. В този случай една заявка може да актуализира дадени редове от таблицата, докато други четат или актуализират останалите.
За да зададете изрично машина за съхранение, можете да използвате опцията engine в конструкцията create table. Дадената по-долу служи за създаване на таблица t с машина за съхранение InnoDB:

CREATE TABLE t (i int) ENGINE = InnoDB;

При липсата на engine, сървърът на MySQL ще създаде таблицата с подразбиращата се машина за съхранение. Тя се определя от стойността на системната променлива storage engine.
За да определите коя машина е използвана за дадена таблица, можете да използвате конструкцията SHOW create table или SHOW table status:
mysql> SHOW CREATE TABLE City\G
*************************** 1. row ***************************
Table: City
Create Table: CREATE TABLE 'City" (
'id' int(ll) not NULL auto_increment,
'Name' char(35) not null default
'CountryCode' char(3) NOT null default
'District' char (20) not null default V,
'Population' int(ll) not null default '0',
PRIMARY key ('id') ) ENGINE=MyISAM DEFAULT CHARSET=latinl
1 row in set (0.00 sec)

mysql> SHOW TABLE STATUS LIKE ' CountryLanguage'\G
*************************** 1 row ***************************
Name: CountryLanguage
Engine: MyiSAM
Version: 10
Row_format: Fixed
Rows: 984
A.vg row length: 39
Data length: 38376
ix data length: 167503724543
Index length: 22528
Data free: 0
auto increment: NULL
Create time: 2005-04-26 22: 15: 35
Update time: 2005-04-26 22: 15: 43
Check time: NULL
Collation: latinl Swedish ci
Checksum: NULL
Create options:
Comment:
row in set (0. 00 sec)

Таблицата informationschema tables съдържа информация също и за машините за съхранение:
mysql> SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES
-> WHERE TABLE SCHEMA = "world';

-----------------------------------------------
TABLE_NAME 1 ENGINE

City 1 MyISAM
Country 1 MylSAM
CountryLanguage MylSAM
------------------------------------------------

Въпреки че имате избор коя машина за съхранение да използвате за дадена таблица, в повечето случаи начинът на използването й след нейното създаване не зависи от машината. Действията върху всички видове таблици се изпълняват с помощта на интерфейса на SQL, a MySQL автоматично управлява детайлите, зависими от машината за съхранение, на по-ниско ниво в архитектурата си. С други думи, вашият интерфейс за контролиране на таблиците се намира в по-високия слой SQL, докато детайлите за управлението им са на по-ниския слой на машината за съхранение. Независимо от това има случаи, в които да знаете коя машина управлява дадената таблица ще ви позволи да я използвате по-ефективно. Оптимизациите, свързани с машините за съхранение, са разгледани в глава 38, „Оптимизиране на бази данни".
За да може да се използва дадена машина за съхранение, тя трябва да се компилира в сървъра и да бъде разрешена. Той използва модулна архитектура: всяка машина за съхранение представлява софтуерен модул, който се компилира в сървъра. Използването на този подход позволява включване само на някои машини в сървъра по време на конфигурирането.
Някои машини за съхранение са винаги налични. Такива са например MylSAM, merge и memory. Други са незадължителни. Поддръжката за тях може да се избере по време на конфигурирането и изграждането на MySQL. Вътрешно компилираните незадължителни машини за съхранение могат да се активират и дезактивират също и чрез стартова опция на сървъра. Например InnoDB е включена във всички двоични пакети. Ако изградите MySQL от сорс код, InnoDB се включва по подразбиране, освен ако не зададете конфигуриращата опция —without-innodb. На всеки сървър, поддръжката на включена машина за съхранение може да се дезактивира при стартиране, с помощта на опцията

—skip-innodb.

Ако желаете да намалите размера на използваната памет, избягвайте конфигурирането на ненужни машини за съхранение в сървъра. За тази цел трябва да компилирате MySQL от сорс код, вместо да използвате предварително подготвен двоичен пакет. В случай, че използвате такъв, който включва вътрешно компилирани незадължителни машини за съхранение, които не са ви необходими, можете да ги дезактивирате по време на работа.
За да видите кои машини са компилирани в сървъра и дали са достъпни по време на работа, можете да използвате конструкцията show engines.

mysql> SHOW ENGINES\G
*************************** 1 row *************************** Engine: MyiSAM Support: DEFAULT
Comment: Default engine as of MySQL 3.23 with great performance
*************************** 2. row ***************************
Engine: MEMORY Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
*************************** 3. row ***************************
Engine: HEAP Support: YES
Comment: Alias for MEMORY

Източник: MySQL 5.0(Пол Дюбоа, Стефан Хинц, Карстен Педерсън)

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)