Архів за місяць: Травень 2011

Додавання користувача до існуючої групи

Колись я використовував графічну утиліту redhat-config-users для керування користувачами. Вона була досить зручна, хоча іноді аварійно закривалася.

Але для роботи через ssh вона не підходе. Тут краще щось консольно-орієнтоване.

Тепер по суті. Якщо треба додати користувача до існуючої групи, то слід використати таку команду:

# usermod -a -G groupname username

Це простіше ніж графічний интерфейс :)

Відновлення панелей у Xfce4

Раптом у менеджері вікон Xfce зникли панелі.  Тобто користувач входить у сеанс, бачить свій робочий стіл, але панель задач та панель з кнопками запуску відсутні.

Спробував відкрити додаток панелей через параметри Xfce але він не відкрився.

Перевірив журнал помилок графічного сеансу:

$ tail  ~/.xsession-errors
...
** Message: Xkb extension found
** Message: Querying XF86Misc extension
** Message: XF86Misc extension found
** Message: Querying Xkb extension
** Message: Xkb extension found
*** PULSEAUDIO: Unable to connect: Connection refused
Connection failure: Connection refused

** (xfce4-panel:21950): WARNING **: xfce4-panel is not running

** (xfce4-panel:21952): WARNING **: xfce4-panel is not running

Скаржиться, що програма xfce4-panel не запущена. Через термінал запустив її:

$ xfce4-panel

Одразу панелі з’явилися на екрані. Не закриваючи xfce4-panel! завершив сеанс через кнопку виходу. Наступний вхід у Xfce був такий як завжди – панелі були на місці.

Конвертація дампу бази даних MySQL з Latin1 у UTF8

Постала задача забезпечити підтримку юнікоду у базі даних. Після модифікації параметрів підключення до БД виявилось, що замість юнікоду зберігається якась абракадабра.

Хоча були додані стандартні параметри:

  • useUnicode=true
  • characterEncoding=utf8
  • characterSetResults=utf8
  • connectionCollation=utf8_general_ci

Уважно подивившись у код дампу БД я побачив, що для усіх таблиць використовується кодування latin1 замість utf8. Нижче ви можете побачити фрагмент дампу:

...
DROP TABLE IF EXISTS `autosave`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `autosave` (
 `id` int(10) unsigned NOT NULL auto_increment,
 `create_time` timestamp NOT NULL default CURRENT_TIMESTAMP
 on update CURRENT_TIMESTAMP,
 PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;
...

Традиційний програміст почав би копати документацію MySQL на тему зміни кодування БД та окремих таблиць, але сьогодні я обрав тактику системного адміністратора: я вирішив замінити кодування прямо у дампі БД.

Отже спочатку я створюю дамп БД у файлі dump.sql:

$ mysqldump -u КОРИСТУВАЧ -p БД > dump.sql

Потім використовую команду sed для заміни всіх кодувань таблиць:

$ sed -i 's/DEFAULT CHARSET=latin1;/DEFAULT CHARSET=utf8;/' dump.sql

Якщо лячно одразу використовувати цей запит на реальному дампі, можете переглянути спочатку його результати (що саме він модифікує) такою командою:

$ sed -n 's/DEFAULT CHARSET=latin1;/DEFAULT CHARSET=utf8;/p' dump.sql
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
...

Тепер видаляємо стару БД, створюємо її знову, але вже з кодуванням UTF-8 за умовчанням:

$ mysql -u КОРИСТУВАЧ -p БД
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 36
Server version: 5.0.51a-24+lenny2 (Debian)
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> DROP DATABASE БД;
Query OK, 64 rows affected (0.20 sec)
mysql> CREATE DATABASE БД DEFAULT CHARSET utf8;
Query OK, 1 row affected (0.01 sec)
mysql> exit
Bye

І нарешті заливаю новий дамп:

$ mysql -u КОРИСТУВАЧ -p БД < dump.sql