от Пейо Попов(14-02-2005)

рейтинг (30)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Едно от нещата, които ме дразнят в подбора на пакетите включени в Fedora Core 3 е старата версия на предпочитаната от мен база данни - MySQL. Клонът версии започващи с 3.x.x отдавна е обявен за остарял от екипа на MySQL, но поради неизвестни за мен причини разработчиците на Fedora ползват последната стабилна версия от него.

Досега предпочитах удобството на автоматичните обновявания на стария клон, но тъй като все повече продукти изискват версия 4.x, а и предимствата на новите версии стават все повече и повече, реших да обновя до последната стабилна версия.

MySQL AB предоставят и rpm дистрибутив, който се ползва за основа на включения в development клона на Fedora Core пакет на MySQL версия 4.1.9. Това, че е в development клона не трябва да ни притеснява, защото MySQL са доказали многократно, че не пускат нестабилни версии, а в момента 4.1 клона е водещата им стабилна версия.

Проблемът при обновяването на MySQL се състои в това, че много други пакети разчитат на него. Такива са php-mysql, perl-DBD-MySQL, MySQL-python и други. Затова ако опитаме просто да обновим версията ще получим конфликт на зависимостите, защото ще се опитаме да премахнем библиотеки, от които горните пакети имат нужда. На моята работна станция следните пакети зависят от MySQL:
Примерен код
# rpm -e –test mysql mysql-server mysql-devel
 error: Failed dependencies:
 libmysqlclient.so.10 is needed by (installed) pam_mysql-0.5-1.i386
 libmysqlclient.so.10 is needed by (installed) perl-DBD-MySQL-2.9003-5.i386
 libmysqlclient.so.10 is needed by (installed) php-mysql-4.3.10-3.2.i386
Възможен начин да се справим с тази зависимост е да прекомпилираме всички зависими пакети да ползват новите библиотеки, но това ще направи доста трудно последващото им обновяване, а плюс това има значително по-лесен начин.

MySQL предоставят rpm пакет MySQL-shared-compat, който съдържа библиотеките от предишните версии и сред тях е и липсващата ни в горния случай libmysqlclient.so.10:
Примерен код
rpm -qpl MySQL-shared-compat-4.1.9-0.i386.rpm
 warning: MySQL-shared-compat-4.1.9-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
 /usr/lib/libmysqlclient.so
 /usr/lib/libmysqlclient.so.10
 /usr/lib/libmysqlclient.so.10.0.0
 /usr/lib/libmysqlclient.so.12
 /usr/lib/libmysqlclient.so.12.0.0
 /usr/lib/libmysqlclient.so.14
 /usr/lib/libmysqlclient.so.14.0.0
 /usr/lib/libmysqlclient_r.so
 /usr/lib/libmysqlclient_r.so.10
 /usr/lib/libmysqlclient_r.so.10.0.0
 /usr/lib/libmysqlclient_r.so.12
 /usr/lib/libmysqlclient_r.so.12.0.0
 /usr/lib/libmysqlclient_r.so.14
 /usr/lib/libmysqlclient_r.so.14.0.0

Използвайки този пакет, няма да ни се налага да прекомпилираме зависимите от новата версия пакети, като те ще могат да бъдат обновявани автоматично.

Разработчиците на Fedora предлагат своя версия на този пакет под името mysqlclient10-3.23.58-4.i386.rpm и този пакет съдържа само библиотеките от версиите на MySQL, които се дистрибутират в стабилния клон на Fedora:
Примерен код
# rpm -qpl mysqlclient10-3.23.58-4.i386.rpm
 /etc/ld.so.conf.d/mysqlclient10-i386.conf
 /usr/lib/mysql/libmysqlclient.so.10
 /usr/lib/mysql/libmysqlclient.so.10.0.0
 /usr/lib/mysql/libmysqlclient_r.so.10
 /usr/lib/mysql/libmysqlclient_r.so.10.0.0

Аз предпочитам да ползвам пакета на Fedora, защото нямам нужда от съвместимост с 4.0 версията.

Тъй като опита да обновим версията чрез познатото ни rpm -Uvh ще доведе до грешка поради конфликт на зависимостите, трябва първо да премахнем старата версия и да инсталираме на чисто пакета със старите библиотеки, за удовлетворяване на зависимостите, а след това и самия сървър за бази данни. Това става със следните команди:
Примерен код
rpm -e --nodeps mysql mysql-server mysql-devel mysql-bench
 rpm -Uvh mysqlclient10-3.23.58-4.i386.rpm
 rpm -Uvh mysql-4.1.9-1.i386.rpm mysql-devel-4.1.9-1.i386.rpm mysql-server-4.1.9-1.i386.rpm mysql-bench-4.1.9-1.i386.rpm

След това трябва вече да имаме функциониращ MySQL версия 4.1.9.

Накратко, този шел скрипт трябва да свърши работата вместо вас или поне да ви даде ясна предства за последователността на нужните действия:
fedora-upgrade-mysql.sh
#!/bin/bash
 # A script to update MySQL on Fedora systems
 # Author Peio Popov
 # Use at your own risk!
 
 # Current MySQL version and build
 VER=4.1.9-1
 
 echo “Stop the database server”
 /etc/init.d/mysqld stop
 
 echo “Remove old MySQL version”
 rpm -e –-nodeps mysql mysql-server mysql-devel mysql-bench
 
 echo “Install the compatibility libraries”
 rpm -Uvh http://fedora.lcpe.uni-sofia.bg/fedora/linux/core/development/i386/Fedora/RPMS/mysqlclient10-3.23.58-4.i386.rpm
 
 echo “Install the new MySQL”
 rpm -Uvh http://fedora.lcpe.uni-sofia.bg/fedora/linux/core/development/i386/Fedora/RPMS/mysql-$VER.i386.rpm
 rpm -Uvh http://fedora.lcpe.uni-sofia.bg/fedora/linux/core/development/i386/Fedora/RPMS/mysql-devel-$VER.i386.rpm
 rpm -Uvh http://fedora.lcpe.uni-sofia.bg/fedora/linux/core/development/i386/Fedora/RPMS/mysql-bench-$VER.i386.rpm
 rpm -Uvh http://fedora.lcpe.uni-sofia.bg/fedora/linux/core/development/i386/Fedora/RPMS/mysql-server-$VER.i386.rpm
 
 echo “Start the database server”
 /etc/init.d/mysqld start


<< Как да "сваляме" Debian с Jigdo от българските огледала. | LiVES и неговият създател >>