От миналата седмица закупихме Fantastico Deluxe инсталатора, който по мое скромно мнение е един от най приличните за CPanel сървъри. Инсталирахме го тествахме и всичко мина гладко. Днес един клиент ми съобщи за проблем с енкодинга на wordpress инсталация. Прегледах нещата и веднага лъсна проблема базите бяха с енкодинг по подразбиране Latin1 вместо UTF8 като се предполагаше. Още по забавното е, че в phpmyadmin-а пише че се използва UTF8 по подразбиране, драма. Реших да прегледам файловете на Fantastico-то да видя дали няма някъде където мога да окажа настройките за базите данни по подразбиране на пръв поглед не видях нищо. След това нещо ме текна да видя какво има в my.conf-а и какво да видя нямаше съответните настройки във конфигурация и всичко си пали на каквото му е зададено по подразбиране. Mysql сървъра е хардкоднат да ползва UTF8 ако не е конфигуриран с други настройки и Fantastico-то явно е с Latin1 ( което е доста глупаво решение). Решението както винаги е тривиално добавят се 2 реда в [mysqld] часста за да се окаже UTF8 като кодировка по подразбиране и всичко заспива 🙂

character-set-server=utf8
collation-server=utf8_general_ci

Нямам никаква идея поради каква причина съм пропуснал тези настройки при положение че си играх да правя няколко „фини“ настройки на mysql-а.

Enhanced by Zemanta

Official Iceweasel Icon, used in Debian Package

Използвам Debian от почти 5-6 години вече. Едно от нещата което винаги ме е смущавало е, че хората от Debian team-а са заместили Firefox с Iceweasel. Причината е съвсем идеологическа – тъй като Debian-ци държат да имат напълно 100% свободна дистрибуция а някой компоненти като шрифтове и други неща са собственически в Firefox се използва fork-а в който е освободен от тези неща. Понякога „Ледената Невестулка“ се е държала странно, но никога не съм имал 100% ясно доказателство, че маргинално е различен browser. Поне така беше до вчера. Вчера си направих html5 test на browser-а ми и установих неприятния факт, че правя 10-15 точки по малко от стандартната версия. Изключително неприятно, веднага сверих версиите ми бяха еднакви 18.0.1. От тук нататък нещата са ясни, че ще се завърна към стандартната версия но се чудя защо важни компонентни не работят както се очаква и това не е споменато. Като цяло доста се дразня на фанатизирани идеолози които ще предпочетат 100% отворено решение което дори и да не работи толкова добре колкото трябва ще бъде основно. Това е като да загубя основната производителност на GPU-то за да използвам свободния драйвер за Nvidia вместо този който ми предлага производителя – лично аз не мога да си позволя подобна загуба на производителност. Та нека да се върнем на миграцията от единия на другия browser. Като цяло е доста простичка ако мога да я изброя в няколко стъпки ще наблегна на най важните

  1. Сваляне на правилната версия за вашата архитектура има значение дали ще ползвате x86 или x64 версията за плъгините като флаш и някой други който вече са инсталирани на системата ви. Ако не сте сигурни каква е архитектурата ви може да проверите с uname -m командата в козолата.
wget ftp://ftp.mozilla.org/pub/firefox/releases/$VERSION/linux-$(uname -m)/en-US/firefox-18.0.1.tar.bz2 -O /tmp/firefox.tar.bz2
  1. Разархивиране на browser-a това може да го направите където си искате /home /opt или където душа ви сака лично аз предпочтох /opt
tar jxfv /tmp/firefox.tar.bz2 -C /opt/
  1. Добавяне на линк към стария изпълним файл към новата локация на browser-а
ln -s /opt/firefox/firefox /usr/bin/firefox
  1. добавяне на линк за plugin-ите към новата локация за да можем да гледаме flash клипове и прочие
ln -s /usr/lib/mozilla/plugins /opt/firefox/plugins
  1. обновяване на broser-a по подразбиране
update-alternatives --install  /usr/bin/x-www-browser x-www-browser /opt/firefox/firefox 100
  1. и добавяне на запис за новата програма във вашата система
echo '[Desktop Entry]
Name=Firefox
GenericName=Web Browser
Comment=Surf the internet
Exec=/opt/firefox/firefox %u
Terminal=false
Icon=/opt/firefox/icons/mozicon128.png
Type=Application
Categories=Application;Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;
StartupWMClass=Firefox-bin
StartupNotify=true' > /usr/share/applications/firefox.desktop

В общи линии това са стъпките който трябва да следваме. Понеже аз съм мързели и не ми се прави всичко на ръка всеки път си направих следния скрипт.

#!/bin/bash

VERSION='18.0.1'

if [ $EUID -ne 0 ]
then
echo -en "�33[1;31mERROR: Must be a 'root'!!! nUse 'su' or 'sudo ./ff_install' :) �33[0m n"
exit
fi

wget ftp://ftp.mozilla.org/pub/firefox/releases/$VERSION/linux-$(uname -m)/en-US/firefox-18.0.1.tar.bz2 -O /tmp/firefox.tar.bz2

tar jxfv /tmp/firefox.tar.bz2 -C /opt/
chown $1:$1 -R /opt/firefox
mv /usr/bin/firefox /usr/bin/firefox-iw
ln -s /opt/firefox/firefox /usr/bin/firefox
ln -s /usr/lib/mozilla/plugins /opt/firefox/plugins

update-alternatives --install  /usr/bin/x-www-browser x-www-browser /opt/firefox/firefox 100

echo '[Desktop Entry]
Name=Firefox
GenericName=Web Browser
Comment=Surf the internet
Exec=/opt/firefox/firefox %u
Terminal=false
Icon=/opt/firefox/icons/mozicon128.png
Type=Application
Categories=Application;Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;
StartupWMClass=Firefox-bin
StartupNotify=true' > /usr/share/applications/firefox.desktop

Важно нещо което пропуснах е че директорията където се намира версията на firefox-а трябва да е на настоящия ви потребител за да може да надграждате версиите без проблеми. Затова горния скрипт трябва да се стартира със атрибут вашия потребител.

./ff_install your_user_name

Както писах наскоро моите хора от Debian преминават на multiarch support. Това само по себе си е хубаво нещо доста неща ще вървят по нормално например някой проблеми с wine на x64 архитектурата ще отпаднат. Понеже моята система е доста по сложно конфигурирана по принцип е sid (unstable) обаче се ползват пакети и от тестинг и с multiarch-а нещата се смазват. Крайно неприятно при това. Та днес ми се наложи да си почистя системата от всички i386 зависимости за да може да палне както хората 🙂

В общи линии процедурата е изключително тривиална. Почистваме пакетите забраняваме i386 архитектурата и живеем щастливо 😉 как се случва това със следната команда по долу. Т.е те са 2, в случай че на някой му е интересно колко пакети е успял да нашие покрай всичките неща дето си е качил реално втората почиства системата.


dpkg -l | grep i386
apt-get remove --purge .*:i386

До тук всичко е ясно с чистичка система сме. Остана само да забраним архитектурата дето ни мачка системата


dpkg --remove-architecture i386

apt-get update

Здравей чист живот.  Ако някой ден не ме мързи ще седна да си напиша pin-овете за приоритети на пакетите като хората че да не се мачка и multiarch-а но като цяло нямам много голямо желание да го правя предпочитам чиста x64 система пред  множество повтарящи се библиотеки.

/dev/random

Имах една доста интересна закачка закачка – трябваше да създам огромен брой случайно генерирани пароли като имах изискване да са с определена дължина да съдържат големи малки букви и цифри, нормални неща. Звучи лесно нали и в общи линии е. Използвах /dev/urandom за оснонвата генерация и след това с един кратък конвейер филтрирах до желания брой знаци и видове знаци които трябва да се използват. Стига съм увъртал в основната скрипта е конвейера :

cat /dev/urandom | tr -dc '[:alnum:]' | fold -w 20| head -n 1

Така нека да разгледаме малко по подробно какво се случва тука. Взимаме изхода на cat /dev/urandom. След това го филтрираме да се показват само малки, големи букви и цифри. След това с fold ограничаваме дължината на низовете до желания от нас брой. Накрая лимитираме да се показва само 1 ред от целия изход. В общи линии лесно като 1-2-3. Ако искате да повишите сложността на паролата и със специалените символи в регуляярни израз на tr може да се използва :graph: или :print: вместо :alnum:, които включват всички символи без или със space.

cat /dev/urandom | tr -dc '[:graph:]' | fold -w 20 | head -n 1
Enhanced by Zemanta

Моите хора от Debian пак са оцапали гащите със зависимостите. Т.е не са ги оцапали ами са разкарали пакета ia32-libs който е в зависимостите на skype. Няма да коментирам защо им е в зависимостите при положение че е х64 версия 😉 Та в крайна сметка има няколко приложения които директно се трият заради премахването на тоя пакет. За хубаво или лошо няма как да се справя без тях така, че се налага да се възстанови пакета. Най лесния вариант е да се добави testing хранилище и да се даде приоритет на него в общи линии е това в е чак толкова пак това 😀 Стъпките по надолу разглеждат системата когато вече сме я обновили и ia32-libs вече го няма.

1. Добавяме testing хранилище или wheezy- това е кодовото име на следващия stable Debian. В /etc/apt/source.list добавете ред който изглежда по подобен начин


deb http://debian.ludost.net/debian/ wheezy main contrib non-free

2. Даваме приоритет на testing пакетите над тези на unstable хранилищата тъй като към момента пакета все още го има там. Създаваме файлът /etc/apt/preferences.d/apt (това си е лично мой избор) може да е в /etc/apt/preferences вместо /etc/apt/preferences.d/ и му добавяме следното съдържание


Package: *
Pin: release a=testing
Pin-Priority: 1010

3. apt-get update за да обнови новите хранилища и приоритети. Смъквате си skype на ново които към момента е версия 4.0.0.8.1 и си го инсталирате dpkg и след това си поправяте липсващите пакети


dpkg -i skype-debian_4.0.0.8-1_amd64.deb

apt-get install -f

 

В доста общи линии това е процедура за принудително сваляне на версиите на пакетите но аз съм я използвал само за тези за които ми трябва в последствие може дадете приоритет на  ia32-libs ia32-libs-gtk lib32v4l-0 да се свалят само от testing хранилката.