воскресенье, 20 июля 2008 г.

Решение проблемы с индикатором WiFi (WiFi-LED)

В Debian с ядром 2.6.24 изначально есть проблема с индикатором активности Wi-Fi для карточек Intel Pro Wireless 3945: он не работает вообще. После поиска решение было найдено здесь. Для исправления проблемы качаем последний патч из списка и кладем его в папку с исходниками ядра (в принципе, можете кинуть куда угодно, если знаете что делаете). Далее из-под рута пишем:
patch -p0 -i имя_файла.diff
После этого пересобираем ядро + initrd (в процессе сборки ядра будет задан вопрос по поводу включения WIFI LED ... отвечаем на него положительно, т.е. Y), перезагружаемся и ура! При активном соединении индикатор будет гореть, а при передаче/приеме данных еще и едва заметно мигать.

P.S. Аспекты сборки ядра и initrd опишу несколько позже.
P.P.S. Wi-Fi LED уже в ядре начиная с версии 2.6.26, но, вроде, выключены по-умолчанию. Смотрите пост про сборку ядра.

пятница, 11 июля 2008 г.

Надо заняться редизайном шаблона в блоге, а то какие-то все страшные они...

TuxOnIce (бывший suspend2) в Debian

Надумал поставить себе улучшенную версию "усыпляльщика" системы, TuxOnIce. Самое привлекательное - сжатие образа памяти налету шустрым алгоритмом. Т.к. пока что процесс сжатия происходит быстрее процесса записи на жесткий, это позволяет сократить время засыпания/подъема системы, а это ой как важно!

Сейчас у меня установлено ядро 2.6.24-7 из репов ленни.

Как оказалось, последняя версия патча TuxOnIce есть в Дебиановских репозиториях. Пакет зовется linux-patch-tuxonice. Однако, его установки не достаточно для начала работы TuxOnIce. Это всего-лишь патч. Нужно скачать еще и исходники ядра (можно из репозиториев стянуть, получим исходники того ядра, на котором система и работает). Далее, патчим исходники... для этого переходим в корневую папку исходников (у меня это /usr/src/linux-source-2.6.24) и оттуда от имени рута выполняем

../kernel-patches/all/apply/tuxonice

Теперь открываем конфигуратор ядра и там смотрим опции, которые нам нужны. Все настройки находятся разделе Power management -> Hibernation -> Enchanced Hibernation. Там можно включить/выключить хранение образа памяти в файле или в свопе, поддержку сжатия ;) , поддержку сплеш-картинки, а также включить по-умолчанию TuxOnIce и заменить старый метод гибернации. Себе я включил запись в своп, сжатие и замену старого метода, плюс оставил включенной опцию "Checksum pagaset2" (как я понял, это нужно для проверки целостности образа памяти). Пока не пробовал подключать сплеш-картинку, но обязательно попробую позже...

После этого собираем ядро в дебиан-пакет командой

make deb-pkg

и ждем. Процесс не быстрый. После этого устанавливаем полученный пакет. Если все прошло так же, как у меня, то пакет не заменит старую версию ядра, а поставит еще одну, также модули установятся в отдельную папку.

А теперь самое интересное. Для работы этого чуда нужно:
  • добавить скрипт в initramfs для пробуждения системы, иначе после усыпления при загрузке системы не будет восстановлен образ памяти, а система загрузится как ни в чем не бывало (за исключением отвалившегося свопа с сообщением "Unable to find swap-space signature")
  • собрать initrd с новыми модулями и добавленным скриптом
  • настроить загрузчик на новое ядро, initrd и указать устройство для хранения образа памяти.
Теперь подробно. Убедитесь, что у вас установлен пакет initramfs-tools, он нам понадобится. Скрипт вот такого содержания:

#!/bin/sh
PREREQ=""

prereqs()
{
echo "$PREREQ"
}

case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac

if [ -d /sys/power/tuxonice ]; then
echo 1 > /sys/power/tuxonice/do_resume
fi

нужно положить в файл /etc/initramfs-tools/scripts/local-premount/tuxonice
Самая веселая шутка в том, что имя файла должно содержать только цифры, буквы и символ подчеркивания. Если назвать файл как-нибудь так: "tuxonice.sh", то ничего не сработает. ;) Ну и не забываем сделать файл исполняемым:

chmod ugo+x /etc/initramfs-tools/scripts/local-premount/tuxonice

Далее, собираем initrd. Для этого делал я следующее. Для удобства переходим в консоли в папку /boot, затем оттуда от рута выполняем:

mkinitramfs -o initrd.img-2.6.24 2.6.24

Подробнее о параметрах:
  • -o <имя образа> - это выходной файл, думаю можно указывать что душе угодно, главное - затем загрузчику указать тот же файл.
  • <версия ядра> - это версия ядра, для которой мы собираем initrd. Если его не указывать, то программа возьмет модули от текущей версии ядра и система может не стартовать вообще.
Если настройка производится для текущего ядра можно использовать команду по-проще:

update-initramfs -u

Теперь настраиваем загрузчик. Сам я использую GRUB, поэтому и настройку привожу для него. Вот как выглядит запись для нового ядра:

title Debian GNU/Linux, kernel 2.6.24 Custom Kernel
root (hd0,0)
kernel /boot/vmlinuz-2.6.24 root=/dev/sda1 ro vga=791 resume=swap:/dev/sda5
initrd /boot/initrd.img-2.6.24

Просто скопируйте строчку, с помощью которой загружаетесь в данный момент и измените 3 параметра:
  • /boot/vmlinuz-2.6.24 - это образ ядра, он устанавливается из deb-пакета, который сгенерирован системой сборки ядра. Подставляйте свой файл.
  • resume=swap:/dev/sda5 - это параметр для TuxOnIce. Он говорит, куда записывать и откуда брать образ памяти. У меня это своп-раздел /dev/sda5. Выяснить, что вам нужно здесь вписывать поможет "fdisk -l", тип какого устройства swap, такой адрес и пишите. Здесь также можно указать и файл, но я не пробовал, поэтому советовать не буду... читайте документацию на официальном сайте.
  • /boot/initrd.img-2.6.24 - это ваш initrd.


На этом базовая настройка заканчивается... и начинаются танцы с бубном. Если система пишет, что на второй стадии ей чего-то там не хватило, что у вас установлено extra_pages_allowance в 500, а ей нужно больше, то методов решения тут несколько. Нужно изменить этот параметр настолько, чтоб вашей системе хватило (он напишет, например, 764/500, вот вам нужно больше, чем 764, себе выставляю на 1000, поэтому далее в методах решения буду использовать эту цифру). Методы:
  • Одноразовый метод. Нужно выполнить
    echo 1000 > /sys/power/tuxonice/extra_pages_allowance
    это увеличит параметр до очередной перезагрузки.
  • Изменить конфигурационный файл /etc/hibernate/suspend2.conf, добавить в него строчку
    ProcSetting extra_pages_allowance 1000
    Есть только одно НО: этот метод у меня не работает, надо еще исследовать... может конфиг переименовать в tuxonice.conf ...
  • Жесткий метод. Нужно найти в пропатченых исходниках ядра эту константу, изменить на желаемое значение, пересобрать ядро и initrd. Будьте аккуратны с этим, отмена патча после изменения будет работать криво.
Предпочтительнее, конечно, заставить работать второй метод. Если получится, допишу. Можно еще строчку из первого метода добавить в скрипт, который затем зашивается в initrd, но пока не проверял такое решение.

Обновление от 15 апреля 2009
В версии 3.0.1 по-умолчанию используется сжатие lzo. А вот модуль для работы с этим сжатием не включается в initrd. Исправляется это добавлением в файл /etc/initramfs-tools/modules строчки:
lzo
Не забудьте обновить initrd:
update-initramfs -u

Настройка fstab

Пришлось на днях вручную настраивать fstab. Хочу занести познания в блог, чтоб не забыть как это делается...

Как обычно, всё просто, если разобраться: в каждой строке представлено по одной точке монтирования. Столбцы через пробел - это:
1) Адрес устройсва, или его идентификатор, или можно еще по метке диска указывать
2) Адрес в файловой системе куда данное устройство монтируется
3) Тип файловой системы. В Дебиане для записи на NTFS нужно указывать драйвер ntfs-3g, еще его предварительно надо установить ;)
4) Опции через запятую без пробелов. Сильно зависят от типа ФС. О некоторых из них хочется поговорить подробнее.
5) Частота "дампа". х.з. зачем и кому это надо (если кто знает, просветите, пожалуйста). Ставим 0 и радуемся.
6) Поле необходимо fsck - оно определяет порядок проверки файловых систем. Для корня ставим 1, для прочих ставим 2. А чтоб ФС не проверялась, ставим 0.

Теперь подробнее об опциях. Для файловых систем без поддержки распределения прав существует 3 опции:
  • umask
  • dmask
  • fmask
Суть следующая: первый параметр задает фильтр, который накладывается на права доступа к папкам и файлам, второй и третий позволяют раздельно задавать маску прав для папок и файлов соответственно. Задаются они в 8-миричном виде. Нюанс в том, что это не права, а именно маски, т.е. это права, которые надо снять у файлов и папок. :) Например, опции "fmask=133,dmask=022" запретят запускать файлы любым пользователям, запретят запись в файлы и папки всем, кроме владельца.

В дополнение к этим опциям есть еще две:
  • uid
  • gid
Они задают соответственно владельца и группу для всех файлов. Обе опции должны задаваться в виде числовых идентификаторов, а не имен.

среда, 2 июля 2008 г.

Нет жизни в Линуксе

Линукс - это зло. Покупайте, люди, винду+хороший антивирус+тотал коммандер+МС офис и живите счастливо!! А то можно кучу времени потратить на настройку Линукса, а он, тварь, так и не хочет (/не может/ему лень) делать то, что вы хотите. Поставил на днях Дебиан. И стало так грустно. Вроде, люди серьезные его делают, а так Убунте проигрывает по всем статьям, что УЖАС просто:
1) В стабильной версии Дебиана Гном версии 2.14 (!!!!). Как можно вообще предлагать ставить этот архаизм?!! Пофигу что он стабильный! Табуретка тоже стабильная, однако на табуретке далеко не уедешь!

Фиг с ним, выкачал еще метров 600 пакетов, обновился до testing. Самое веселое, что хрен где найдешь нормальное хауту! Вроде, 21 век на дворе... Всего-то надо изменить в списке репов etch на lenny, затем обновить список пакетов и из консоли дист-апгрейд сделать! И хоть бы одна сволочь подсказала! Все, перенах, такие умные, что сидят по углам и втихую обновляются до ленни!

2) Не хочет нормально работать блютус-мышь!! Из сервисов блютуса есть только аудио! Версия блютус-апплета такая же как в Убунте 8.04, пакеты такие же установлены, а input-сервиса так и не появилось. :( Ну почему одни могут, а другие - нет?... Конечно, можно каждый раз из консоли ее цеплять через БТ-адрес, но согласитесь, это МАРАЗМ! И ведь тут даже автоконнект при старте системы не спасает... мышь же не всегда включена! Поработал с тачпада, а тут мышь понадобилась.... Включил и заработала? ХЕР! Трахай себе мозг, пока не скиснет!

3) Нельзя выключить динамики на ноутбуке. Т.е. когда наушники втыкаешь, колонки не замолкают (это и в Убунте так :((( ), но в Убунте хоть можно вручную выключить, а в Дебиане - никак. Ну что за современная ОС...

4) Не хотят ставиться дрова на видео. Те, что из репов, ужасно устарели, на них моя железяка тока ползать умеет. Летать ее учат более поздние дрова. Пытался ставить от производителя, предоставил все необходимости, они говорят давай нам ГЦЦ 4.1... У меня и 4.1 и 4.3 установлены, а они его не видят. Грустно. Так и живу на vesa. :(

5) Светячиеся кнопочки упорно работают как тачпад и упорно прокручивают списки вместо перелистывания песен... хоть убейся. Огорчает. :( В драйвере тачпада нету биндинга клавиш. В драйвере обычной мыши есть, а в драйвере тачпада - нет. Весь ман прочитал по синаптиксу - увы.

Кстати, до Дебиана пробовал ставить Генту... желание снести этого "очень быстрого" пингвина возникает примерно после 2-3 часов беспрерывной компилляции пакетов. :( Фронтенда для системы пакетов под ГТК я не увидел. До Апт и Синаптика им - как до Марса пешком!!! Хотя нет, это же быстрая система... как до Марса на велосипеде!