Архів за місяць: Листопад 2013

Заміна IP адреси у файлах зон BIND

Є такі люди, що люблять подорожувати. Іноді сайти та сервіси теж зриваються з насидженого місця та вирушають у дорогу. Така міграція – справжній головний біль для системного адміністратора. Коли мова йде про 1-2 сервіси, це не проблема, а от коли переїжджає цілий хостінг.

Задача: є сервер імен BIND в якому треба поміняти всі записи зі старим IP на новий. Справу ускладнює те, що не всі зони треба міняти (оновлювати serial). Зміни мають зачепити лише ті файли зон, в яких дійсно змінюється IP. Як правило, я роблю такі зміни за допомогою Perl сценарію, але сьогодні спробував вичавити по максимуму командний рядок Лінукс.

У каталозі /etc/bing/db були зібрані файли зон, але були вкладені каталоги та символічні посилання. Тому на першому етапі відбираємо лише файли з каталогу та не чіпаємо підкаталоги:

find /etc/bind/db -maxdepth 1 -type f

Через xargs направляємо файл до grep

grep -H -m 1 '75.147.252.194'

Аргумент -H обов’язково додасть ім’я файлу до виводу, а -m 1 – покаже лише перше згадування старої IP-адреси.

Тепер залишаємо лише ім’я потрібного файлу зони (перший стовпець):

cut -d: -f1

Цю конструкцію я додав до Perl сценарію і на виході мав перелік файлів, в яких потрібно було зробити заміну IP та serial номер зони:

my $db_dir = "/etc/bind/db";
my $old_ip = '75.147.252.194';

my @files = `find $db_dir -maxdepth 1 -type f |
 xargs grep -H -m 1 '$old_ip' |
 cut -d: -f1`;

3mob інтернет через модем HUAWEI Mobile у Debian

Інколи, в мене падає кабельний інтернет і я змушений переключатися на резервний 3G від 3mob (колишній Утел та Укртелеком). Як я вже писав, з першого разу я зміг без проблем підключитися до 3G мережі, але потім всі мої спроби підключення завершувались аварійно.

Тоді в мене не було часу розбиратися в чому справа, бо як правило, кабельний інтернет швидко починав робити знову і я забував про свій 3G. Але сьогодні я вирішив з’ясувати в чому справа.

Перш за все, після відмови підключитися, я продивився вивід dmesg:

# dmesg | tail -n 1
[407908.851115] modem-manager[11161]: segfault at 0 ip
 00007f3172ea60a8 sp 00007fff6ce952c8 error 4 in
 libglib-2.0.so.0.3200.4[7f3172e32000+f5000]

Segmentation fault – це завжди погано. Погугливши на тему modem-manager я знайшов багато подібних проблем і рішення у стилі “ось тобі молоток та зубильце – доопрацьовуй”.

Справа в тому, що Лінукс не вірно визначає ідентифікатор пристрою. Але це можна полагодити.

1. Підключаємо USB модем і дивимось вивід dmesg:

$ dmesg | tail
[408349.676873] ehci_hcd 0000:00:1a.0: setting latency timer to 64
[408349.692769] xhci_hcd 0000:00:14.0: setting latency timer to 64
[408349.896576] usb 1-1.2: new high-speed USB device number 4 using
 ehci_hcd
[408349.999615] usb 1-1.2: New USB device found,
 idVendor=12d1, idProduct=1446
[408349.999626] usb 1-1.2: New USB device strings: Mfr=2, Product=1,
 SerialNumber=0
[408349.999632] usb 1-1.2: Product: HUAWEI Mobile
[408349.999637] usb 1-1.2: Manufacturer: HUAWEI Technology
[408350.004599] scsi33 : usb-storage 1-1.2:1.0
[408350.005229] scsi34 : usb-storage 1-1.2:1.1
[408350.595754] ehci_hcd 0000:00:1d.0: setting latency timer to 64

Нас цікавить лише ідентифікатор виробника (idVendor) та пристрою (idProduct).

2. Він рута завантажуємо модуль option:

# modprobe option

3. Через команду usb-devices перевіряємо які ідентифікатори виробника та продукту вказані для нашого модему (вивід скорочено):

# usb-devices 
...
T:  Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 15 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=12d1 ProdID=1001 Rev=00.00
S:  Manufacturer=HUAWEI Technology
S:  Product=HUAWEI Mobile
C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
I:  If#= 3 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
I:  If#= 4 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
...

4. Видно, що виробник вказаний вірно, а от код пристрою – ні. Встановлюємо вірні значення:

# echo 12D1 1446 > /sys/bus/usb-serial/drivers/option1/new_id

Після цього мій 3G модем HUAWEI успішно підключився до мережі 3mob.