воскресенье, 20 декабря 2009 г.

Движения разделов или grub потерялся...

Давно хотел синхронизировать свои наработки по учебе накопленные на ноутбуке с тем, что живет на домашнем компьютере.

Сразу стоит оговорится, что с незапамятных времен живет у меня на домашнем компьютере две ОС. Fedora Linux и еще одна известная проприетарная система. Так вот, когда ставил эти системы, то решил, что для домиков в Linux мне вполне хватит нескольких Гб, и почти весь диск (кроме /, /boot, /home и /var) отдал под общий раздел с форматированием присущим той самой проприетарной системе. Соответственно, на этот раздел легло тяжкое бремя хранения мультимедиа-контента и остального хлама. А у этого самого волшебного формата ФС есть неприятная особенность - он понятия не имеет о POSIX-правах доступа :( Здесь-то я как раз и "наступил на грабли"...

Т.к. при виде прав доступа к файлам в 777 у меня сердце кровью обливается, то на точку монтирования (с всем содержимым выли выданы чёткие права) и при попытке взять свежий слепок из svn-репозитария я получал много варнингов/ошибок, мол: "Хозяина, права выставить не могем. Совсем плёхо-плёхо..." И подобный неприятные ощущения всплывали периодически. Последней каплей стала попытка учебную директорию со всем содержимым закатать в bzr-репозиторий. Волшебная ФС вообще не поняла, чего от нее хотят и тупо хлопала глазками в пол...

И тут я понял! А нафига мне под мои видео-музыки так много пространства... Хауса и Друзей давно пора на болванки закатывать и в погреб!

Решил я подвинуть немного разделы :) Благо интересующие меня сущности в таблице разделов располагались близко друг от друга. Между ними буквально /var только затесался.
Дальше тривиально:
 - убил лишнее пор^W видео на большом разделе;
 - снял dump с /var и /home;
 - слил их от греха подальше на ноут;
 - подвинул раздел с неext ФС;
 - загрузился с Fedora 12 DVD в rescue-режиме;
 - cfdisk'ом снес /home и /var;
 - им же создал вышеозначенные разделы где и какие надо;
 - отформатировал свежие разделы, но уже в ext4;
 - восстановил содержимое /home и /var с помощью restore.

Отдельный поклон BSD'ям за dump/restore.

Бутаюсь и получаю первый болт :( Стартует голый GRUB и весело подмигивает курсором. Ну, думаю, таблицу изменял, может где MBR зацепил... Бутнулся обрабно в rescue mode. Провалился в /mnt/sysimage. Дошел ножками до конфигов grub'а. Осмотрел - все на месте. Проинсталил grub заново (grub-install hd0). Бутнулся...

И получил второй болт :( Теперь grub видел свой конфиг, но из меню отрабатывал только chainloader, который вел в ту ось, в которую мне не надо. На законных ядрах grub опять грустно разводил руками... Мол: "Нету здесь ничего, хозяйна... :'( " Как же так, я ж не двигал разделы в начале. Порядок, номера, все на месте осталось...

Ну чтож делать. Подался я гуглить на ноуте, параллельно загружаясь в rescue mode с диска. Нашел несколько несчастных с подобными симптомами, и почитал реплики сочуствующих. Так как проблема ограничивалась конфигом grub'а, то решил покурить его по-внимательнее:

# cat /boot/grub/grub.conf
default=0
timeout=2
splashimage=(hd0,2)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.31.6-166.fc12.x86_64)
        root (hd0,2)
        kernel /vmlinuz-2.6.31.6-166.fc12.x86_64 ro root=UUID=fff0ee4c-021c-45e4-84fd-de8bdd25e731 rhgb SYSFONT=latarcyrheb-sun16 LANG=ru_RU.UTF-8 KEYTABLE=us nomodeset
        initrd /initramfs-2.6.31.6-166.fc12.x86_64.img
title Fedora (2.6.31.5-127.fc12.x86_64)
        root (hd0,2)
        kernel /vmlinuz-2.6.31.5-127.fc12.x86_64 ro root=UUID=fff0ee4c-021c-45e4-84fd-de8bdd25e731 rhgb SYSFONT=latarcyrheb-sun16 LANG=ru_RU.UTF-8 KEYTABLE=us nomodeset
        initrd /initramfs-2.6.31.5-127.fc12.x86_64.img
title Other
        rootnoverify (hd0,0)
        chainloader +1

Через некоторое время до меня дошло, а чего это Other живет на (hd0,0), а /boot с ядрами (который идет следом в таблице разделов) на (hd0,2)! Правлю все на (hd0,1) и получаю полностью работоспособную систему.

Собственно был еще один болт. Разделы-то я подвинул, а новые UUID в fstab я не прописал :) Но система ткнула меня в эту оплошность при первой же попытке загрузиться... rescue mode -> blkid -> vim /etc/fstab и все в шоколаде.

Внимание, вопрос! Какого х%#?

Оно ж работало как-то? Или это волшебство произошло при обновлении на Ferora 12-ю, которое недавно перенесла домашняя машина... Если кто подскажет, я крепче спать стану...

Про merge bzr-веток расскажу позже, если чего интересное будет...

четверг, 28 мая 2009 г.

Если Вы пытаетесь поставить Fedora 10 (или около того) на сервер с RAID-контроллером от Adaptec, то скорее всего вы сталкнетесь с тем, что система встанет нормально, но загружаться не захочет. А дело в том, что образе initrd не хватает модуля i2o_block. Решение простое: пересобрать initrd с нужным модулем.

Ниже пример с использованием Fedora install CD в rescue режиме:

chroot /mnt/sysimage
rm /boot/initrd-2.6.27.24-170.2.68.fc10.i686.img
mkinitrd --with=i2o_block /boot/initrd-2.6.27.24-170.2.68.fc10.i686.img 2.6.27.24-170.2.68.fc10.i686

понедельник, 25 мая 2009 г.

set hostname by DNS


#!/bin/bash

IP=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' |cut -d: -f2 | cut -d' ' -f1`
host $IP | awk '{ print $5}' | sed s/.$// > /proc/sys/kernel/hostname

среда, 13 мая 2009 г.

Изменение образа initrd

Взято с IBM developerWorks.

Распаковка образа.
  1. Для ОС Red Hat Enterprise Linux старше версии 3 и SUSE Linux Enterprise Server старше версии 9:
    [root@linuxhost ~]#cp /boot/initrd-x.x.x-x.ELsmp.img ./initrd.gz
    [root@linuxhost ~]#mkdir temp
    [root@linuxhost ~]#gunzip ./initrd.gz
    [root@linuxhost ~]#mount -o loop -t ext2 initrd temp
    
    Эта команда распаковывает образ initrd.img в файл initrd.gz. Затем файл монтируется как том с файловой системой ext2 в точку монтирования temp. После этого вы сможете просматривать все файлы, упакованные в образ initrd.
  2. Для ОС Red Hat Enterprise Linux версии 4 и выше или SUSE Linux Enterprise Server версии 10 и выше:
    [root@linuxhost ~]#cp /boot/initrd-*.img ./initrd.gz
    [root@linuxhost ~]#mkdir temp
    [root@linuxhost ~]#cd temp
    [root@linuxhost ~]#gzip -dc ../initrd.gz | cpio -id
    
    В новых дистрибутивах Linux образ initrd дополнительно упакован при помощи cpio. Приведенные выше команды распаковывают файловую систему полностью со структурой каталогов в каталог temp. После этого вы обнаружите все файлы из образа initrd в каталоге temp.
Упаковка образа..
  1. Для ОС Red Hat Enterprise Linux старше версии 3 и SUSE Linux Enterprise Server старше версии 9:
    [root@linuxhost ~]#umount temp
    [root@linuxhost ~]#gzip initrd
    [root@linuxhost ~]#cp initrd.gz /boot/initrd-2.x.x-x.img
    

  2. Для ОС Red Hat Enterprise Linux версии 4 и выше или SUSE Linux Enterprise Server версии 10 и выше:
    [root@linuxhost ~]#find ./ | cpio -H newc -o > ../initrd
    [root@linuxhost ~]#gzip initrd
    [root@linuxhost ~]#cp initrd.gz /boot/initrd-2.6.x-x.img
    

Настройка раскладки клавиатуры в Fedora 10

# cat /etc/sysconfig/keyboard
KEYBOARDTYPE="pc"
KEYTABLE="ru"
LAYOUT="us,ru"
MODEL="pc105"
OPTIONS="grp:caps_toggle,grp_led:scroll"
VARIANT=""

И ни каких xorg.conf.

пятница, 24 апреля 2009 г.

Извлечение соответствий

Когда операция сопоставления находит в строке соответствие указанному регулярному выражению, она присваивает результаты своей работы нескольким специальным переменным:

  • в переменную $` помещается часть строки до найденного соответствия;
  • в переменную $& помещается часть строки, соответствующая образцу;
  • в переменную $' помещается часть строки после найденного соответствия;
  • в переменную $+ помещается последнее найденное совпадение для последнего шаблона в скобках.

Синтаксические конструкции для работы со ссылками на данные


СкалярМассивХэш
Взятие ссылки на объект$sref = \$scalar;$aref = \@array;$href = \%hash;
Создание ссылки на анонимный объект$sref = \'Литерал';$aref = [$a, $b];$href = {$a => $b};
Доступ к значению объекта ссылки${$sref} $$sref@{$aref} @$aref%{$href} %$href
Доступ к значению элемента объекта ссылки$aref-> [$index] ${$aref}[$index]$href->{$key} ${$href}{$key}
Доступ к срезу объекта ссылки@{$aref}[$i1, $i2]@{$href}{$k1, $k2}
Значение функции ref($ref) для объекта ссылкиSCALARARRAYHASH