Xmpppy

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

xmpppy_send

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import xmpp,os,sys,ConfigParser

config = ConfigParser.ConfigParser()
config.read(os.path.dirname( sys.argv[0] )+"/xmpppy_send.ini")

xmpp_jid = config.get('from','jid')
xmpp_pwd = config.get('from','pwd')

to = sys.argv[1]
msg = sys.argv[3]
subject = sys.argv[2]

jid = xmpp.protocol.JID(xmpp_jid)
client = xmpp.Client(jid.getDomain(),debug=[])
client.connect()
client.auth(jid.getNode(),str(xmpp_pwd),resource='xmpppy')
client.send(xmpp.protocol.Message(to,msg,"chat",subject))
client.disconnect()
xmpppy_send.ini

[from]
jid: your@jid.example.com
pwd: PaSSw564ORD
[to]

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