fuseiso

Утилита для монтирования .iso образа в user-space, не требует привилегий root.

fuseiso image.iso ./mountpoint

отмонтировать

fusermount -u ./mountpoint

openSUSE Build Service 1.7

Недавно был выпущен новый релиз OBS 1.7:

http://news.opensuse.org/2010/02/09/opensuse-build-service-1-7-now-available.

Представляет из себя значительно усовершенствованный продукт по сравнению с 1.6. Описания нововведений тут не будет, их можно прочитать в анонсе и инструкции. Особенно важно, что из интерфейса выкинута все символика openSUSE, а страница Server Status стала такой вебдванольной с кучей графиков: теперь смогу наблюдать свои собирающиеся два пакета в день в виде дельта-функций на этих графиках. При обновлении OBS потянул за собой рельсы 2.3 и кто-то из них еще потянул memcached.

Далее идет подробный список граблей, заботливо разложенных разработчиками:

  • Как и во всех прошлых версиях, в пакете obs-signd бинарик /usr/bin/sign едет без SUID-бита. Верные права:

    -rwsr-x--- 1 root obsrun 45710 Фев 9 11:47 sign
  • В /etc/init.d/obssignd традиционно не прописан лог-файл.
  • Рабочие анонсируют себя по SLP, выключить это можно OBS_USE_SLP="no" в /etc/sysconfig/obs-worker.
  • Переменная relsync_pool в BSConfig.pm должна быть проверена и выставлена в соответствии с желанием:

    http://lists.opensuse.org/archive/opensuse-buildservice/2010-01/msg00149.html
  • В cron добавлены правила для отрисовки графиков, которые запускаются от lighttpd:

    cron: Permission denied
  • Подробную инструкцию по миграции можно прочитать в README.UPDATE и ReleaseNotes.
  • Задачи из крона запускаются раз в минуту, что оставляет сообщения в /var/log/messages
  • Если рабочие обнаруживают присутствие kvm в системе — они запускаются с ключем --kvm, повергая этим скрипт build в полнейшее неработоспособное состояние

Цветной grep

В большинстве современных дистрибутивов программы из пакета grep, и некоторые программы из пакета coreutils(например ls) давно уже умеют выдавать разукрашенный вывод на консоль.

Если же почему-то вывод не цветной(администратор или мейнтейнеры пакетов установили такие настройки глобально), просто добавьте в ваш .bashrc или .aliases следующую строчку:

alias grep='grep --color=auto'

Цветовую схему можно настраивать, для этого служит переменная окружения GREP_COLORS: Grep Environment Variables.

django + lighttpd

Как заставить вместе работать lighttpd и django. Готовый пример конфигурации, которую необходимо складывать в vhosts.d:

$SERVER["socket"] == "0.0.0.0:8888" {
        server.document-root = "/srv/www/django/htdocs"

        url.access-deny = ( "~", ".inc", ".svn/" )

        fastcgi.server = (
                "/dispatch.fcgi" => (
                "main" => (
                        "socket" => "/srv/www/django/run/fcgi.sock",
                        "bin-path" => "/srv/www/django/manage.py runfcgi --pythonpath=/srv/www/django --settings=djangoapp.settings-production method=threaded",
                        "max-procs" => 2,
                        "check-local" => "disable",
                        "fix-root-scriptname" => "enable",
                )
                ),
        )

        alias.url = ( "/static" => "/srv/www/django/htdocs", )

        url.rewrite-once = (
                "^(/static.*)$" => "$1",
                "^/favicon\.ico$" => "/static/favicon.ico",
                "^(/.*)$" => "/dispatch.fcgi$1"
        )
}

Предполагается, что проект лежит в /srv/www/django/, где для него существует рабочая версия настроек в файле settings-production.py. lighttpd сам запустит fcgi-сервер в количестве max-procs экземпляров. Опция check-local необходима для того, чтобы отключить проверку существования файлов на локальной машине, которую делает lighttpd; так как запрашиваемые URL существуют лишь в логике django, а не в файловой системе.

Для правильной работы тегов типа {% url %} необходимо добавить строчку FORCE_SCRIPT_NAME = '' в настройки проекта написанного на django, иначе ко всем ссылкам в начало будет добавляться название /dispatch.fcgi.

xrandr

RandR(The X Resize and Rotate Extension) — это расширение сервера x11 позволяющее динамически менять разрешение экрана, его размер, ориентацию и другие параметры без перезапуска X-сессии. Может быть очень полезен при подключении мультимедийного проектора к ноутбуку. Взаимодействие пользователя осуществляется с помощью одноименной утилиты xrandr, хотя оконные менеджеры предоставляют свои графические обертки для работы с RandR.

xrandr оперирует с выходами(outputs), самый простой способ узнать их наименования и поддерживаемые параметры: xrandr --prop. Общий синтаксис: xrandr --output name --command. Подключая или отключая VGA-устройства во время работы компьютера можно использовать команду xrandr --output VGA --auto для того, чтобы разрешить вновь подключенный выход, или выключить отсоединенный. Есть отдельная команда xrandr --output VGA --off.

Может возникнуть такая ситуация, что экраны должны быть сконфигурированы для показа одно экрана(как в случае мультимедийных проекторов), либо для показа разных участков(два монитора): xrandr --output VGA --same-as LVDS (варианты --left-of, --right-of, --above, --below).

Разрешения двух выходов могут не совпадать, можно использовать команду xrandr --output VGA --mode mode для установки нужной моды, список доступных покажет команда --prop.

Когда физическое отношение сторон экранов двух выходов в режиме --same-as не совпадает(например, если ноутбук 16:10, а мультимедийный проектор 4:3), необходимо либо вырезать нужную часть экрана командой xrandr --output VGA --pos xxy, установив левый верхний угол в позицию x, y., либо использовать команды --scale, которые к сожалению поддерживаются только начиная с версии 1.3 протокола. К счастью, например okular в режиме показа презентаций оставляет черные поля по бокам слайдов 4:3, таким образом использование --pos даже предпочтительно, позволяя отцентрировать выход проектора, отрезав черные поля.

cron: Permission denied

После обновления на openSUSE 11.2 перестали запускаться некоторые задачи cron'а. Описаны они были в отдельном файле, расположенном в /etc/cron.d и запускаться должны быть не от root, а от некоторого системного пользователя. Но вместо выполнения, в /var/log/messages обнаружились только записи вида "/usr/sbin/cron[47852]: Permission denied".

Ошибка, прямо скажем, не очень информативного содержания. openSUSE использует vixie-cron, снабженный дополнительными патчами, один из которых обеспечивает работу с PAM. В пакете идет так-же и файл /etc/pam.d/crond с настройками.

Исполнению скрипта мешал модуль pam_unix2.so(разработанный Thorsten Kukuk), т.к. этот модуль новой версии считает, что аккаунт заблокирован, если в файле /etc/shadow на месте пароля записан символ '!'. По некоторому стечению обстоятельств так и оказалось. Еще туда можно записать '*', как говорится, почувствуйте разницу.

"Argument list too long"

Какое количество аргументов можно запихнуть в командную строку? Как хорошо известно, исполнение новой программы запускается той или иной вариацией функции exec. А функции эти иногда могут возвращать ошибку E2BIG. Дословно процитировав man, можно было бы воскликнуть: "The total number of bytes in the environment (envp) and argument list (argv) is too large."

В Linux константа ARG_MAX определена в файле include/linux/limits.h, где так и написано 131072 байтов (это на переменные окружения и аргументы командной строки вместе).

Где-то между 2.6.22 и 2.6.23 ситуация немного изменилась, посмотрев в функцию get_arg_page(), что в файле fs/exec.c, можно заметить, что теперь размер ограничен четвертью стека, и, следовательно, может быть неограничен вовсе, т.к. размер стека может быть изменен перед запуском процесса, используя команду ulimit -s.

Простенький скрипт позволяющий поиграть с размером области для аргументов. Будет работать только на системах с ядрами новее, чем 2.6.23. На более старых всегда будет один и тот же результат — 131072.
#!/bin/sh

EXEBIN=/bin/true

pattern=$(perl -e 'print ("x" x 4095)."\n";')

ulimit -s $1
ulimit -s

arg=$pattern
while $EXEBIN $arg
do
        echo -n .
        arg="$arg $pattern"
done

echo $? ${#arg}