ZFS раздел в gentoo

Решил поиграться с ZFS - сделал это самым надёжным образом, сделал пул с партициями и по накидал туда нужных данных без бекапов ;) Надёжный метод - рекомендую. Пока настраивал наступил несколько раз на грабли, самое смешное что забыл добавить сервис в автозагрузку, не повторяйте чужих ошибок.

rc-update add zfs boot

Ещё непонятный перл вышел с zpool.cache, почему то его не оказалось там где его ожидает /etc/init.d/zfs пришлось гулить, правда ушло секунд пять, ситуация исправляется так:
zpool import -o cachefile=/etc/zfs/zpool.cache -R /mnt zfs

Был ещё непонятный для меня момент, что этот самый ключ -R не вносит изменений в постоянные опции пула, ручками опять же установил точку монтирования
zfs set mountpoint=/mnt/zfs zfs

Но в общем и целом доволен, особенно порадовали фичи компрессии на лету и дедупликация. Но как корневую фс использовать пака не буду - не вижу смысла, для этого. К тому же недавней установки дома на винт с разбивкой gpt/lvm хватило, может быть в другой раз под настроение.

Мультимониторная конфигурация на интегрированном интеле

Долго бороздил просторы интернета по теме неизвестно зачем, нужно было начать с прочтения man intel.

Но всё же оставлю в качестве заметки конфиги и кое какие пояснения, вдруг у кого man не работает ;)

/etc/X11/xorg.conf

Section "Monitor"
  Identifier     "Monitor0"
EndSection

Section "Monitor"
  Identifier     "Monitor1"
  Option         "RightOf" "Monitor0" 
  Option       "PreferredMode" "1600x900"
EndSection

Section "Device"
        Identifier "Intel Integrated"
        Driver "intel"
        Option "monitor-VGA1" "Monitor0"
        Option "monitor-HDMI1" "Monitor1"
EndSection

Section "ServerFlags"
  Option    "Xinerama" "true"
EndSection

Section "Screen"
  Identifier          "VGA1"
  Device              "Intel Integrated"
  Monitor             "Monitor0"
  DefaultDepth       24
  SubSection "Display"
    Modes           "1280x1024"
    ViewPort            0 0
    Virtual          2880 1024 
  EndSubSection
EndSection

Section "Screen"
  Identifier         "HDMI1"
  Device             "Intel Integrated"
  Monitor            "Monitor1"
  DefaultDepth       24
  SubSection "Display"
    Modes          "1600x900"
  EndSubsection
EndSection

Section "ServerLayout"
  Identifier         "Xinerama2m"
  Screen 0 "VGA1"
  Screen 1 "HDMI1" RightOf "VGA1"
  Option "Xinerama" "true"
EndSection
Что-то тут явно лишнее, но самым интересным было выяснить про строчки
        Option "monitor-VGA1" "Monitor0"
        Option "monitor-HDMI1" "Monitor1"

Сделать это просто xrandr -q В выводе будут эти самые <type> из man intel перед которыми надо прописать monitor- и вписать как опции в секцию Device.

Ну и поначалу это работало у меня просто запуском строчки
xrandr --output HDMI1 --mode 1600x900 --right-of VGA1

Мелкие недоразумения в Cacti 0.8.7i

Собрался было обновлять cacti, но вспомнил что правил кой чего из его родных файлов. Собственно некоторые diff'ы(извините задом наперёд):

--- ./lib/database.php  
+++ ./lib/database.php~ 
@@ -50,7 +50,6 @@
        while ($i <= $retries) {
                $cnn_id = ADONewConnection($dsn);
                if ($cnn_id) {
-                       $cnn_id->EXECUTE("set names 'utf8'");
                        return($cnn_id);
                }

--- ./lib/adodb/drivers/adodb-mysqli.inc.php    
+++ ./lib/adodb/drivers/adodb-mysqli.inc.php~   
@@ -73,7 +73,6 @@
            // Set connection options
            // Not implemented now
            // mysqli_options($this->_connection,,);
-           mysqli_options($this->_connectionID,MYSQLI_OPT_CONNECT_TIMEOUT,300);
            if (mysqli_real_connect($this->_connectionID,
                                    $argHostname,
                                    $argUsername,
Как можно догадаться я использую mysqli соединение.
Как всё же соберусь обновится - напишу новые мини фиксы наверно ;)

Автообновление системы

Зарисовка на bash'е на тему автоапдейта.

#!/bin/bash
#update for gentoo
BEFORE=`/bin/date +%s`
LOGFILE="/var/log/update-err.log"
logg() {
case "$1" in
        "0" ) /usr/bin/logger -p local7.notice -t update "successfully completed $2";;
        "1" ) /usr/bin/logger -p local7.err -t update "failure $2";;
        "2" ) /usr/bin/logger -p local7.info -t update "$2";;
esac
}
operator() {
        /bin/sh -c "$1" 2>>$LOGFILE && logg 0 "$1" || logg 1 "$1"
}
logg 2 "Update start - $BEFORE"
operator "/usr/bin/eix-sync"
operator "/usr/bin/emerge -DuN --keep-going y @world"
operator "/usr/bin/emerge @preserved-rebuild"
XORG=`FORMAT='<installedversions:INSTFORMAT>\n' INSTFORMAT='{first}{}<date:DATEFORMAT>{!last}{}' DATEFORMAT='%s' /usr/bin/eix -I x11-base/xorg-server`
if [ "$BEFORE" -lt "$XORG" ] ; then
        operator "/usr/bin/emerge @x11-module-rebuild"
else
        logg 2 "x11 module rebuild not needed"
fi
#read
#operator "/usr/bin/emerge @module-rebuild"
#operator "/usr/bin/revdep-rebuild"
Желающим воспользоваться: допилить перед использованием, у меня работает, но это не значит что у вас тоже заработает. Скрипт предоставляется как есть, то бишь если что не так, то меня не пинать.
Касательно eix-sync - предполагается что он уже настроен (читать здесь и здесь ).
У меня скрипт висит в кроне

35 7 * * * /usr/bin/tmux new -s update -d /usr/local/bin/update
Само собой syslog и logrotate настроите сами по вкусу.
Для тех кто _не знал / забыл_

sudo less /var/log/emerge.log
sudo less /var/tmp/portage/<категория>/<имя-пакета>-<версия>/temp/build.log

Способы лечения невнимательности

Если вдруг вы сделали так
sudo rm /etc/portage/package.keywords/using
а потом немного подумав ещё и так
sudo rm /etc/portage/package.use/using
то вам наверняка нужен отдых ;).
Спустя какое-то время приходит осознание что надо эти пару файлов как то вернуть, а ни бэкапов ни возможности восстановить файлы нет.
Частично можно решить проблему следующими командами
sudo sh -c "eix --installed-unstable --only-names >> /etc/portage/package.keywords/repair"
sudo sh -c "qlist -IU | grep -E '\(' | sed 's/(//;s/)//' >> /etc/portage/package.use/repair"
Конечно это не вернёт утраченные файлы в первозданном виде, но почти заставит пакетный менеджер работать также как и раньше ;)
з.ы.: комментарии с исправлениями и улучшениями приветствуются, пост написан в аффектном состоянии и автор не несёт ответственности за работоспособность вашей системы после выполнения вышеуказанных действий ;)

egencache

При использовании sqlite для хранения кэша portage возникают некоторые смежные проблемы, которые хорошо расписаны в man и на форумах, но поскольку многие их не читают вообще решил прояснить кое какие моменты в своём блоге.
Ссылки на вики про настройку всем известны, но приведу их для конкретизации источника информации.
http://en.gentoo-wiki.com/wiki/Portage_SQLite_Cache
http://ru.gentoo-wiki.com/wiki/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B5%D1%88%D0%B0_Portage_%D0%B2_SQLite

Почти не отличимые оригинал (чуть более новый) и перевод. Отличается лишь одное значение
OVERLAY_CACHE_METHOD=...
Указание что что-то неведомым образом там не работает :-P
Такие вики конечно повергают в шок, ну да ладно идём читать man eix или форумы о генту и выясняем что надо немного поправить конфиги и всего-то

/etc/eix-sync.conf

*
@egencache --repo=wavilen --update

естественно egencache надо вызывать для каждого оверлея в котором нет метаданных (а таких большинство), можно вызывать руками, но разумнее прописать в конфиг. Если вдруг требуется отдельно перегенерировать метаданные для всех оверлеев (бывает запинается из-за ошибок ebuild'описателей)можно просто отпарсить выбрав нужное из конфига и создать shell скрипт

sudo sh -c "cat /etc/eix-sync.conf | sed '/\*/d;s/^\@//g' > /etc/egencache.sh"

Примечание: предлагаемый скрипт явно сыроват, необходимо предусмотреть логирование...

Конечно самом по себе использование sqlite кэша приносит малозаметный эффект, но если объединить с монтированием дерева portage, оверлеев и кэша к ним по NetworkFSv4, то поводов для настройки становится больше. Кстати на счёт кэша я возможно погорячился, но пока более правильного метода не потянул...

Продолжение следует...

Rigelmcr

Достаточно давно срисовал ebuild, но всё не доходили руки задействовать.
sudo tcpdump -i eth0 igmp
смотрим где "хвосты"

22:05:08.517506 IP 10.222.32.1 > ALL-SYSTEMS.MCAST.NET: igmp query v2
22:05:13.031940 IP ТУТ.БЫЛ.МОЙ.АЙПИ > 239.255.255.250: igmp v2 report 239.255.255.250
рисуем конфиг (к примеру такой для машины с тремя физическими сетевыми интерфейсами)
sudo vim /etc/rigelmcr.conf

default_mode downstream
phyint eth0 upstream
        access allow dst 239.192.152.143/24
                allow src 10.0.0.0/8
                deny dst 0.0.0.0/0

phyint br0 downstream

phyint eth1 disabled
phyint eth2 disabled

;) IPTV в линуксе быть!