Міграція гостьових Debian у VirtualBox та проблеми з мережею NAT

Нещодавно я скопіював усі свої гостьові операційні системи з одного комп’ютера на інший. Через OVL формат – це тривіальні задача. Хоча, якщо назви у віртуальних машин однакові (а саме назви файлів для дисків), то це не виходить зробити за один раз. Доводиться кожну таку машину окремо.

Так от, всі машини запустились без проблем, а старенька Debian 4.0 – ні. Точніше вона начебто працювала нормально, але без мережевого інтерфейсу eth0:

$ /sbin/ifconfig
lo        Link encap:Local Loopback  
 inet addr:127.0.0.1  Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 UP LOOPBACK RUNNING  MTU:16436  Metric:1
 RX packets:8 errors:0 dropped:0 overruns:0 frame:0
 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0 
 RX bytes:560 (560.0 b)  TX bytes:560 (560.0 b)

Спроба запустити його вручну закінчилась нічим:

# ifup eth0
Internet Systems Consortium DHCP Client V3.0.4
Copyright 2004-2006 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

SIOCSIFADDR: No such device
eth0: ERROR while getting interface flags: No such device
eth0: ERROR while getting interface flags: No such device
Bind socket to interface: No such device
Failed to bring up eth0.

Файл /etc/network/interfaces післе переносу не редагувався і містив стандартні рядки:

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp

Трохи погугливши вияснив, що проблема в udev. А ще точніше – у файлі /etc/udev/rules.d/z25_persistent-net.rules. На різних версіях Debian-оподібних операційних систем він може мати інші префікси, але persistent-net.rules буде присутнє. Файл мав такий зміст:

# This file was automatically generated by the
# /lib/udev/write_net_rules
# program, probably run by the persistent-net-generator.rules rules
# file.
#
# You can modify it, as long as you keep each rule on a single line.
# MAC addresses must be written in lowercase.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="08:00:27:a5:c0:ff",
 NAME="eth0"

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="08:00:27:97:b2:6b",
 NAME="eth1"

Як я зрозумів, при міграції гостьової Debian, було змінено MAC адресу мережевого адаптеру. І система udev чомусь подумала, що це новий адаптер. Мені залишилось лише видалити інформацію про eth0 (перший рядок) та змінити в другому eth1 на eth0:

SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="08:00:27:97:b2:6b",
 NAME="eth0"

Після перезапуску віртуальної машини – мережа піднялась автоматично.

Форматування флешки після інсталятора Debian

Після встановлення операційної системи з USB флешки, мені вона знадобилась як засіб перенесення інформації на інші комп’ютери. Але образ інсталяційного ISO диску змінив її розмір, тобто треба було повернути її первісний стан та файлову систему FAT32.

Порядок роботи такий:

Вставляємо флешку до USB порту. Запускаємо команду fdisk -l, щоб зрозуміти який це пристрій. Як видно з виводу команди в мене він має назву /dev/sdc:

# fdisk -l
WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util
 fdisk doesn't support GPT. Use GNU Parted.
...
Disk /dev/sdc: 1021 MB, 1021125120 bytes
...
Disk /dev/sdc1: 232 MB, 232783872 bytes
32 heads, 61 sectors/track, 232 cylinders, total 454656 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

 Device Boot      Start         End      Blocks   Id  System

Видно що таблиця розділів містить нестандартний розділ /dev/sdc1 232 Mb. Треба його позбутися. Але спершу потрібно цей розділ відмонтувати:

# umount /dev/sdc1

Запускаємо fdisk /dev/sdc

У режимі діалогу виконуємо 2 команди: o [Enter] та w [Enter]

o   create a new empty DOS partition table
w   write table to disk and exit

Після цього можна створювати файлову систему FAT32:

# mkdosfs -F 32 -I /dev/sdc

jquery.min.map 404 (Not Found) Google Chrome

Ця інформація не пов’язана з Лінукс. Але якщо ви використовуєте браузер Google Chrome для тестування та налагодження веб-сайтів, що використовують jQuery, то це може стати у пригоді.

Якщо у “Інструментах розробника” ви побачили повідомлення типу:

jquery.min.map 404 (Not Found)

То це не помилка jQuery, а помилка Chrome. Позбутися цього повідомлення можна вимкнувши перемикач “Enable source maps”.

jquery.min.map 404 (Not Found)

virt-manager в оточені VirtualBox

Для запуску віртуальних машин на своєму комп’ютері я використовую VirtualBox. Мені здається, що це найзручніша віртуалізація. Може вона не дуже “промислова”, але для локального використання – це те що треба.

Не так давно, мені потрібно було запустити на сервері віртуалізацію KVM. Вона (KVM) сумісна з досить зручною програмою для керування віртуальними машинами – virt-manager. Але коли я поставив її паралельно з VirtualBox в мене виник конфлікт модулів ядра: для того, щоб запустити VirtualBox необхідно було вручну видаляти модуль kvm_intel. Це не зручно. До того ж virt-manager тягне дуже багато пакетів, а користуюсь ним я рідко.

Проблема – як запустити virt-manager, щоб він не заважав роботі VirtualBox?

Рішення в стилі віртуалізації: запустити virt-manager з віртуальної машини VirtualBox.

Отже, я встановив мінімальну гостьову систему Debian Wheezy у VirtualBox.

Мені вистачило 512 Мб оперативної пам’яті та 3 Гб місця на жорсткому диску. Поставив пакети ssh, xorg та virt-manager.

Перевірив, що XForwarding – дозволено:

# grep Forward /etc/ssh/sshd_config
X11Forwarding yes

Та дозволив вхід до гостьової віртуальної машини по протоколу SSH. Тут змушений був застосувати localhost та нестандартний порт 8022:

Тепер для роботи з virt-manager достатньо запустити цю віртуальну машину і набрати такі команди:

$ ssh -p 8022 -Y localhost
$ virt-manager
Gtk-Message: Failed to load module "canberra-gtk-module"
/usr/share/virt-manager/virt-manager.py:306: DeprecationWarning:
 Importing dbus.glib to use the GLib main loop with dbus-python is
 deprecated.
Instead, use this sequence:

 from dbus.mainloop.glib import DBusGMainLoop

 DBusGMainLoop(set_as_default=True)

 import dbus.glib

Не зважаючи на варнінги, в графічному режимі відкривається вікно virt-manager і що головне, як звичайна десктоп програма. Те що вона працює в середині віртуальної машини – майже не помітно.

Nginx+Tomcat7 та обмеження на розмір WAR-файлу у manager

В розробці та тестуванні програмних продуктів, що використовують Tomcat, досить зручно користуватися Web Application Manager (/manager/).

Я використовую зв’язку Nginx+Tomcat, щоб працювати з 80-м портом. Та Nginx пропускає великі WAR-файли лише за наявності такої опції:

http {
    ...
    client_max_body_size 100m;
}

Тепер файли до 100 Мб буде передано Томкату. Проте виявилось у менеджера Tomcat є власне обмеження в 50 Мб:

org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException:
 the request was rejected because its size (67082177) exceeds
 the configured maximum (52428800)

Виправити його можна у файлі TOMCAT_DIR/webapps/manager/WEB-INF/web.xml. Для 100 Мб я вписав таке:

<multipart-config>
  <!-- 100MB max -->
  <max-file-size>104857600</max-file-size>
  <max-request-size>104857600</max-request-size>
  <file-size-threshold>0</file-size-threshold>
</multipart-config>

Встановлення паролю для користувача root у MySQL замість порожнього

Сервер баз даних MySQL за умовчанням працює з порожнім паролем рута. Це зручно, адже не треба нічого пам’ятати для створення нового користувача чи бази даних.

Але коли MySQL встановлено на сервері, до якого мають доступ декілька користувачів, працювати з порожнім root паролем принаймні необачно.

Тому крок перший – перевіряємо чи пускає звичайного користувача як рута без паролю:

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.1.69 Source distribution

Пускає – це погано. Встановлюємо новий пароль для рута:

$ mysqladmin -u root password НОВИЙ_ПАРОЛЬ

Перевіряємо ще раз:

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using
 password: NO)

Зміна hostname у Debian

Командний рядок терміналу (такого як Xterm), як правило, показує запрошення у вигляді:

user@hostname:dir$ _

Це доволі зручно, тому що працюючи одночасно з декількома консолями ви завжди розумієте по значенню @hostname з яким сервером маєте справу. Якщо ім’я серверу записане у форматі домену – www.example.com, то користувач побачить hostname не повністю, а лише його ліву частину до першої крапки:

user@www:dir$ _

У віртуальних серверів (VPS), особливо у орендованих, це ім’я не завжди містить корисну інформацію. Скоріше за все, там буде суміш літер та цифр, або якийсь номер для внутрішнього використання.

Отже як змінити hostname у Debian. Одразу попереджую, що використання команди hostname дає лише тимчасовий ефект, після перезапуску сервера повернеться попереднє ім’я.

Самий простий спосіб – змінити ім’я у файлі /etc/hostname (навіть якщо цей файл порожній) та перезавантажити комп’ютер.

Якщо можливості перезавантажити серер не має, можна спробувати зробити це “на ходу”. Більш детально читайте про це тут: https://wiki.debian.org/HowTo/ChangeHostname

Наведена тут інформація не підходить до контейнерів Debian всередині OpenVZ. Всередині контейнера, навіть якщо ви поміняєте вміст файлу /etc/hostname, після перезапуску hostname повернеться до первісного значення, яке вказане у конфігурації контейнера. Тому для OpenVZ використовуйте команду:

# vzctl set ID_КОНТЕЙНЕРА --hostname НОВИЙ_HOSTNAME --save

Порядок псевдонімів server_name у конфігу Nginx

Веб-сервер Nginx дозволяє доволі гнучко керувати псевдонімами вашого сайту. Можна використовувати декілька директив server_name:

server_name example.com www.example.com alias.com;
server_name www.alias.com;

Мені подобається схема у 2 імені, коли перше іде без www, а друге з www:

server_name example.com www.example.com;
server_name alias.com www.alias.com;

Але перше ім’я домену має найвищій пріоритет і саме воно буде використане за умовчанням при обробці правил rewrite з опціями redirect та permanent.

Простий приклад. Маємо правило:

rewrite ^/user/(.*) /newlook/$1 permanent;

За таким правилом користувача завжди буде перенаправлено до домену example.com:

example.com/user/index.php -> example.com/newlook/index.php
www.example.com/user/index.php -> example.com/newlook/index.php
alias.com/user/index.php -> example.com/newlook/index.php
www.alias.com/user/index.php -> example.com/newlook/index.php

Налаштування 3G інтернету від 3mob (Utel) в Gnome 3 (Linux)

Лінукс, як і всі Unix-оподібні операційні системи, традиційно сильна у налаштуванні мережі. Так було у епоху Ethernet, але з появою бездротових мереж та мобільного інтернету 2G (GPRS/EDGE) та 3G (UMTS/HSPA) підключення до мережі це лише сервіс. Тепер на перший план виходить зручність підключення.

У менеджері вікон Gnome 3 ці налаштування відбуваються майже автоматично, але є я зміг підключитися до 3G від 3mob (Utel) лише першого разу, коли спрацював “візард” налаштування. Потім коли я вставляв USB 3G-модем (HUAWEI) і клацав на перемикачі “Мобільна радіомережа” – з’являлось повідомлення, що “ви підключені до мережі Utel” і потім “з’єднання розірване”. Вам сюди – якщо у Вас проблеми на рівні драйверу USB 3G-модему.

Треба вручну прибрати за “візардом”. Для цього з командного рядка запускаємо:

$ nm-connection-editor

На вкладці “Мобільні широкосмугові” знаходимо підключення Utel та клацаємо кнопку “Змінити…”.

На наступному екрані також обираємо вкладку “Мобільні широкосмугові”. У себе я включив перемикач “Підключати автоматично” – це головне. А також змінив тип на “Віддавати перевагу 3G (UMTS/HSPA)”, та вимкнув “Вмикати роумінг, якщо недоступна домашня мережа”. Закриваємо діалог клацнувши на кнопку “Зберегти…”.

Все. Тепер щоб підключитися до інтернету я вставляю 3G модем, трохи чекаю поки його ідентифікує система та клацаю на кнопці включення “Мобільної радіомережі”.

Заміна одного рядка на два у вбудованому текстовому редакторі Midnight Commander

Не знаю як вам, а мені подобається вбудований текстовий редактор mc. Чогось я так і не зміг оволодіти vim, тому на новому сервері в мене перша команда:

# apt-get install mc

Потім включаю у конфігурації вбудований текстовий редактор для редагування:

F9 / Options / Configurations… / Use internal edit / OK

Тепер клавіша F4 закріплена саме за вбудованим редактором.

Нещодавно, мені довелось вручну правити файл конфігурації сервера імен BIND. Там було доволі багато зон для яких треба було замінити рядок:

type master;

на 2 рядка:

type slave;
masters {192.168.0.1;};

Пошук та заміна у вбудованому редакторі є (F4 Replace), проте незрозуміло як замінити рядок на два рядки. Клавіша Enter працює як OK.

Після декількох спроб я знайшов вихід. Треба перемкнути пошук у режим Regular expression та ввести символ нового рядка як n. Таким самим чином можна додавати символи табуляції – t.