Решения тех проблем, с которым мне приходилось сталкиваться.

четверг, 12 ноября 2009 г.

Обновить список UUID дисков

Если создать новый раздел на диске, то список UUID известных ядру не обновляется. Т.е. несмотря на то, что UUID уже есть (как посмотреть), раздел не монтируется по идентификатору. Чтобы список UUID обновить нужно выполнить команду:


udevtrigger

понедельник, 26 октября 2009 г.

Посчитать количество повторяющихся строк

Например, есть файл с таким содержимым:


A
B
A
C
B
A

Нужно получить такое:

A - 3
B - 2
C - 1

Можно это сделать с помощью awk, но еще проще сделать с помощью утилиты uniq с ключом -c.

среда, 21 октября 2009 г.

сконвертить секунды unix в человеческий формат

Как, например, преобразовать число 1256118655, являющееся количеством секунд с начала Эпохи в нормальное представление?
Вот такой командой:


date -d @1256118655

Т.е. - отобразить (-d) дату, заданную строкой @1256118655. Здесь именно '@' указывает, что исходное число - unix time. А в man date об этом не сказано. Но зато сказано в info date. В этом отличие команды GNU date от аналогичной в BSD. Там формат исходой даты можно задавать явно, а в линукс команда в большинстве случае догадывается и парсит его сама, за исключением вот таких особых случаев, когда ей нужно явно на это намекнуть.

вторник, 6 октября 2009 г.

Рекурсивное назначение прав для директорий

Если нужно раздать права для всего дерева, но чтобы атрибут "x" прописался только для директорий можно использовать такую команду:


chmod -R +rwX somepath/

Раньше я пользовался для этих целей чуть более сложной конструкцией

find somepath/ -type f -exec chmod +rw \{\} \;
find somepath/ -type d -exec chmod +rwx \{\} \;

четверг, 16 июля 2009 г.

32-bit приложения на x64 ubuntu

Чтобы был возможен запуск старых бинарных 32-битных приложений под 64-битной убунтой нужно доустановить мета-пакет ia32-libs.

среда, 15 июля 2009 г.

самосборные модули ядра

Пытался поставить ubuntu на сервер с Intel'овской платой (S5500BC), но оказалось, что имеющийся на плате soft-raid не поддерживается даже самой свежей версией ubuntu (не говоря уж о 8.04 LTS, которая не увидела даже DVD-дисковод).
На сайте Intel драйвера только для RedHat/SuSE. Однако, оказалось, что драйвер можно пересобрать и для другого конкретного ядра. Итак, вот такие шаги:


  1. Скачал и распаковал драйвер

  2. Прочитал The Linux Kernel Module Programming Guide откуда понял, что в прилагающемся Makefile не хватает собственно двух строк:

    all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

    clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

  3. С первой попытки компиляция не удалась. Смысл я до конца не понял, но двух словах - версии ядра в убунту в пределах релиза не увеличиваются, хотя фичи в них встраивают новые, от свежих ядер. Нашел в исходниках директивы условной компиляции, где проверялась версия ядра, исправил циферки, чтобы "как бы старое" ядро распознавалось как "как бы новое". После этого все собралось.

  4. Копируем файл в модули (в моем случае /lib/modules/<kversion>/kernel/drivers/scsi/)

  5. Выполняем depmod -a


В-принципе, все. Если бы это был модуль не-дискового устройства. Для дисковых устройств нужно поместить модуль в initramfs. Для этого в /etc/initramfs-tools/initramfs.conf меняем MODULES=most, на MODULES=list, а в файл /etc/initramfs-tools/modules помещаем список все нужных модулей (можно посмотреть на работающей системе через lsmod).
Потом нужно пересобрать initramfs образ командой update-initramfs -u.

Комментарии:

  1. Собирать драйвер можно на уже работющей системе с таким же ядром (к счастью у меня такая машина была)

  2. Понятно, что если корневая система на изначально доступном блочном устройстве, то помещать модуль в initramfs не обязательно, можно просто прописать его загрузку в /etc/modules)

вторник, 7 июля 2009 г.

Программное перемещение в корзину

Нашел такой пакет - trash. Позволяет управлять корзиной из скриптов. Таким образом настроил автоматическое удаление старых файлов из downloads в корзину.