вівторок, 21 грудня 2010 р.

Причина глюков с показом погоды на android-е найдена

Ею оказалась новая wifi точка, установленная на работе.
Если кто не знает то открою секрет: google apps умеют определять координаты не только по gps, а и по соте, в которой находится телефон, и/или по bssid wifi сетей, которые видит телефон. И не думайте что для этого им нужно было проехаться в вашем районе своим модным автомобильнчиком: координаты этих сот и wifi сетей гуглу уже сдали другие мобилки, которые были в этой соте/видели этот bssid и в которых к тому же был еще и gps.
Так вот у китайцев дефицит mac адресов. В результате bssid моей wifi точки не уникален: гуглением нашлось одно сообщение на forum.nag.ru , где человек жалуется на проблемы с wifi и показывает в логах точно такой же bssid. Кроме того в интернете легко находится сервис, в который можно вбить мой bssid и получить то, что мне мобилка и подсовывает:
"latitude":-22.9039953
"longitude":-43.1353932
"country":"Brazil"
"country_code":"BR"
"region":"Rio de Janeiro"
"city":"Niterói"
Теперь вот вижу два варианта развития: поменять bssid на своей точке, или убедить гугл что этот bssid находится здесь, у меня (и пусть бразильцы охренеют от погоды в Украине)

пʼятницю, 3 грудня 2010 р.

Вот такое вот хреновое лето

Мобилку с андроидом проглючило и она теперь показывает мне текущую погоду в Niteroi: сейчас +26C, максимальная +33C. Издевается, сволочь ...

четвер, 4 листопада 2010 р.

ipfw vs pf: удобство синтаксиса

Многие взлюбили pf за наличие кучи приятных плюшек в конфиге. Вот только иногда люди забывают (или даже не знают), что большинство этих плюшек реализуются не собственно фаерволлом, а утилитой pfctl, которая транслирует конфиг при загрузке. А это: переменные, возможность вместо адреса или сети указывать "адрес (или сеть) с такого то интерфейса", возможность практически в любом месте правила вместо одного элемента указать список (в фигурных скобках).
"Ну и что?" скажут некоторые. А то, что, во первых, без четкого понимания что это всего лишь syntax sugar, реализуемый pfctl, часто можно оказаться обманутым и получить не то, что ожидалось. Напримерь кусок "from em0:network" это на самом деле не "от адресов с сетей, которые установлены на em0", а "от адресов с сетей, который былы установлены на em0 в момент загрузки правил". А правило "block in from not { 192.168.0.0/16, 10.0.0.0/8 }" на самом деле оттранслируется в два: "block in from not 192.168.0.0/16" и "block in from not 10.0.0.0/8" и в результате заблокирует весь трафик, а не трафик от сетей, кроме перечисленных.
"Ну и пусть! Все-равно же удобно! А в ipfw такого нет". Или есть?
Ну, во первых некоторые вещи в ipfw просто не нужны, потому что изначально есть правильные элементы: есть "me" вместо костыля "table <me> { self; }", есть "allow ip from { x or not y or z } to any" (причем и то, и то это элементы фаерволла, а не препроцессора), есть возможность задавать через запятую список сетей или вообще "1.2.3.0/24{128,35-55,89}"
Ну а во вторых все-равно хочется переменных и т.п., пусть и это будет транслироваться на этапе загрузки? Ну так вот же: -p . И вот так оно включается
firewall_enable="YES"
firewall_type="/etc/ipfw.conf.m4"
firewall_flags="-p /usr/bin/m4"
firewall_nat_enable="YES"
А вот так используется:
define(`ext_if',`vlan3')
define(`nat_ip',`100.100.100.20')
define(`rfc1918',`10.0.0.0/8, 172.16/12, 192.168/16')
define(`mailserviceip',`100.100.100.29')
define(`mailerip',`10.1.2.102')

nat 1 config ip nat_ip same_ports log
add nat 1 all from 10.0.0.0/8 to any out xmit ext_if
add deny all from rfc1918 to any out xmit ext_if

add nat 1 all from any to nat_ip in recv ext_if

add fwd mailerip,imaps tcp from any to mailserviceip imaps in

середу, 3 листопада 2010 р.

Вернулся

Фотик не брал вообще (зря на самом деле). Поэтому маємо, що маємо.
Но все-равно не за фотками же ходил. А кому надо фотки - нароете потом в интернете :)

вівторок, 12 жовтня 2010 р.

Advanced disk format on FreeBSD

Вот такой вот свой маленький велосипедик получился:
# cat /etc/rc.d/gnop 
#!/bin/sh
#

# PROVIDE: gnop
# REQUIRE: mountcritlocal
# BEFORE:  zfs
# KEYWORD: nojail

. /etc/rc.subr

name="gnop"
rcvar=`set_rcvar`
start_cmd="do_gnop"
stop_cmd=":"

do_gnop()
{
        for d in $gnop_disks
        do
                if [ -e /dev/$d.nop ]
                then
                        echo "gnop: device $d already configured"
                else
                        echo -n "gnop: configuring device $d ..."
                        gnop create -v $gnop_flags $d
                fi
        done
}

load_rc_config $name
run_rc_command "$1"
# fgrep gnop /etc/rc.conf
gnop_enable="YES"
gnop_disks="ada0 ada1 ada2 ada3"
gnop_flags="-S 4096"

вівторок, 28 вересня 2010 р.

Кодекс киевлянина

Олег Скрипка и Андрей Курков презентовали Кодекс киевлянина
Особо радует "Я буду на дорогах останавливать людей и поправлять их, если увижу, что они не придерживаются правил" (да и собственно сам факт кодекса) на фоне пункта из него же "не учит другого жить и не навязывает свои правила"

вівторок, 21 вересня 2010 р.

Вот тут будет домашняя файлосвалка

# zpool list
NAME     SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
zstore  7.25T   776K  7.25T     0%  ONLINE  -
zusb    3.59G  2.41G  1.19G    66%  ONLINE  -
# zpool status zstore
  pool: zstore
 state: ONLINE
 scrub: none requested
config:

        NAME           STATE     READ WRITE CKSUM
        zstore         ONLINE       0     0     0
          raidz1       ONLINE       0     0     0
            gpt/disk1  ONLINE       0     0     0
            gpt/disk2  ONLINE       0     0     0
            gpt/disk3  ONLINE       0     0     0
            gpt/disk4  ONLINE       0     0     0

errors: No known data errors
# sudo camcontrol devlist
<WDC WD20EARS-00MVWB0 51.0AB51>    at scbus0 target 0 lun 0 (ada2,pass2)
<WDC WD20EARS-00MVWB0 51.0AB51>    at scbus1 target 0 lun 0 (ada0,pass0)
<WDC WD20EARS-00MVWB0 51.0AB51>    at scbus2 target 0 lun 0 (ada1,pass1)
<WDC WD20EARS-00MVWB0 51.0AB51>    at scbus3 target 0 lun 0 (ada3,pass6)
< USB DISK 2.0 PMAP>               at scbus4 target 0 lun 0 (pass3,da0,sg0)
<Generic- SD/MMC 1.00>             at scbus5 target 0 lun 0 (pass4,da1,sg1)
<Generic- MS/MS-Pro 1.00>          at scbus5 target 0 lun 1 (pass5,da2,sg2)

суботу, 18 вересня 2010 р.

2.2 Froyo

HTC опять выложил 2.2 прошивку для Desire (в прошлый раз они выложили глючную прошивку с проблемами в русской клавиатуре и еще где-то). Обновился. Хотел даже написать что-то типа "всё намного проще чем в iPhone": обновляется без компьютера, просто сам телефон стягивает прошивку на флешку, перезагружается, ставит новую прошивку, перезагружается с новой прошивкой.
Но на практике оказались нюансы: после загрузки с новой прошивкой получаю постоянно появляющееся окошко с "The Application HTC Sense (process com.htc.launcher) has stopped unexpectedly. Please Try Again.". Что либо сделать при этом возможности нет. Найденные в интернете рецепты тоже не помогали: на нажатие "search", как в них советовалось, телефон не реагировал. Пришлось делать hard reset.
С hard reset с одной стороны хорошо что все контакты и календарь хранятся у гугла: подключил аккаунт и всё получил назад. Но вот остальное то хранится на телефоне (кстати не понятно почему не сделали бекап на гугл). И если настройки, журнал звонков, список установленных программ это фиг с ними, то потерять все sms не очень приятно.
Долгожданный tethering (раздача телефоном по wifi своего 3g интернета) появился и даже работает. Правда для постоянного использования он интересен разве что в случае, когда нужно раздать интернет одновременно нескольким устройствам: телефон в tethering режиме сел за 3 часа. Так что надо разбираться с использованием интернета с телефона по usb кабелю

неділю, 12 вересня 2010 р.

Доклад на kyivbsd.org.ua

Уговорили чего-нибудь расказать про рабочий кластер (доклад так и назван: FreeBSD cluster). Хотя я и долго сопротивлялся, потому как считаю что ничего особенного там нет.
Так что в комментариях принимаю предварительные вопросы, на которые вы хотели бы услышать ответы по данной теме. Если смогу что ответить, то включу в доклад

суботу, 11 вересня 2010 р.

Обычное рабочее окружение на обычной рабочей станции

$ ps -xo comm|sort|uniq -c|sort -n
   1 COMMAND
   1 dbus-daemon
   1 dbus-launch
   1 firefox-bin
   1 gconfd-2
   1 openbox
   1 osd_clock
   1 osdmixer
   1 ps
   1 ssh-agent
   1 synergys
   1 thunderbird-bin
   1 xautolock
   1 xbindkeys
   1 xearth
   1 xxkb
   6 sh
   9 skype
  30 ssh
  33 xterm
  33 zsh

пʼятницю, 10 вересня 2010 р.

named in jail

Скрипт запуска named в базовой системе FreeBSD по умолчанию запускает его в chroot /var/named . Для своей работы named-у нужен /dev/null и /dev/random , поэтому этот же скрипт запуска монтирует в chroot devfs с рулесетами, оставляющими только эти устройства. Естественно в jail подобный фокус не получится ввиду того, что по умолчанию в jail вообще запрещен mount, и разрешить его можно только для определенных "jail-friendly file systems"
Выходов 3:
  1. не запускать named в jail :)
  2. выключить chroot, выставив named_chrootdir=""
  3. предварительно подготовить dev/ для named: стартовый скрипт при запуске внутри jail не пытается сам примонтировать devfs, а проверяет не примонтирован ли он уже для него.
Вообще наличие 3-го пункта (благодаря r188293) намекает на наличие какой-то "стандартной" процедуры делать это предварительное монтирование, но я эту процедуру не нашел. Поэтому соорудил сам:
jail_levsha_named_dev="${jail_levsha_rootdir}/var/named/dev"
jail_levsha_exec_prestart0="devfs_domount ${jail_levsha_named_dev} devfsrules_hide_all"
jail_levsha_exec_prestart1="devfs -m ${jail_levsha_named_dev} rule apply path null unhide"
jail_levsha_exec_prestart2="devfs -m ${jail_levsha_named_dev} rule apply path random unhide"
jail_levsha_exec_poststop0="umount ${jail_levsha_named_dev}"

середу, 25 серпня 2010 р.

Софт для android: FBReader

Как всегда на высоте. Дневной/ночной режим, очень мелкий шаг подстройки размера шрифта, пролистывание чем угодно, включая кнопки громкости, фиксация вертикального/горизонтального положения.
В общем как и на других мобильных платформах лучшая читалка книжек. Рекомендую

вівторок, 17 серпня 2010 р.

htpc & nas & router: OS

Ввиду моих личный предпочтений на железку была установлена FreeBSD, причем на usb flash, причем current, причем amd64, причем на gpt & zfs :)
На самом деле понятно что в current необходимости нет. Я его выбрал из соображений потенциального полигона для покрутить/потестировать и из соображений что в current уже ZFSv15.
В amd64 тоже необходимости нет: не смотря на то, что в материнку можно установить до 4GB оперативной памяти, видеться системой будет только чуть больше трех:
hw.physmem: 3460689920
Я выбрал amd64 из соображений чтобы на ноуте и медиабоксе была одна архитектура - потенциально это позволит в будущем использовать firewire для дебага.
На материнской плате есть только 4 sata разъема, поэтому отдельный системный диск не поставишь. А ставить систему на диски с данными не хотелось. Поэтому было решено использовать usb flash (уж usb портов полно, с большим запасом).
На дисках с данными планируется использовать zfs (в режиме raidz). Это один из пунктов, почему на системной флешке тоже используется zfs: ввиду того, что zfs в данный момент достаточно плохо интегрирован в систему распределения памяти freebsd, не рекомендуется использовать на одном компьютере и zfs, и ufs одновременно. Кроме того использование zfs на системной флешке избавляет от fsck в случае чего, позволяет использовать вкусности типа снэпшотов, сжатия, возможности легко переехать на флешку большего объема.
Установка на zfs ничем особенным от wiki не отличается. Разве что я ставил не с инсталяционного диска, а вставил флешку в ноут, всё разметил и потом сделал
make installkernel installworld distribution DESTDIR=/zusb
Сейчас используется флешка на 4GB. Пока запас еще есть:
# zpool list
NAME   SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
zusb  3.59G  2.17G  1.43G    60%  ONLINE  -
# zfs list -oname,mountpoint,used,compressratio   
NAME                      MOUNTPOINT             USED  RATIO
zusb                      legacy                2.17G  1.34x
zusb/jail                 /jail                  422M  1.03x
zusb/jail/int             /jail/int              422M  1.03x
zusb/jail/int/tmp         /jail/int/tmp           30K  1.00x
zusb/jail/int/usr         /jail/int/usr          349M  1.00x
zusb/jail/int/var         /jail/int/var         52.7M  1.31x
zusb/jail/int/var/db      /jail/int/var/db      52.0M  1.29x
zusb/jail/int/var/db/pkg  /jail/int/var/db/pkg  26.6M  1.57x
zusb/jail/int/var/empty   /jail/int/var/empty     21K  1.00x
zusb/jail/int/var/log     /jail/int/var/log      446K  3.74x
zusb/jail/int/var/mail    /jail/int/var/mail      21K  1.00x
zusb/jail/int/var/run     /jail/int/var/run       31K  1.00x
zusb/jail/int/var/tmp     /jail/int/var/tmp       23K  1.00x
zusb/tmp                  /tmp                   243K  1.00x
zusb/usr                  /usr                  1.46G  1.49x
zusb/usr/home             /usr/home              353K  1.87x
zusb/usr/local            /usr/local             576M  1.04x
zusb/usr/ports            /usr/ports             415M  1.45x
zusb/usr/ports/distfiles  /usr/ports/distfiles   121M  1.00x
zusb/usr/ports/packages   /usr/ports/packages   61.8M  1.00x
zusb/usr/src              /usr/src               234M  3.24x
zusb/var                  /var                  39.3M  1.73x
zusb/var/db               /var/db               35.0M  1.36x
zusb/var/db/pkg           /var/db/pkg           6.95M  2.94x
zusb/var/empty            /var/empty              21K  1.00x
zusb/var/log              /var/log              2.96M  6.57x
zusb/var/mail             /var/mail               59K  1.00x
zusb/var/run              /var/run               587K  1.00x
zusb/var/tmp              /var/tmp               138K  1.00x
Как видно compression тоже дает какой-то эфект.
Светящийся тут jail это неудачная попытка запустить иксы в jail: изначально была идея что так как компьютер планируется использовать одновременно и для внутренних нужд (htpc), и для внешних (router и torrent клиент), то завести два отдельных jail-а: внутренний и внешний, и тем самым обеспечить невозможность засветить внутренние сервиса на внешний ip и ограничить что именно светить наружу. Но в таком виде идея провалилась, поэтому будет реализована в немного видоизмененной.
Это установленная базовая система фактически без оптимизации (только удалены /boot/kernel/*.symbols), Xorg, mplayer, nvidia-driver, openbox и всё, чего оно захотело:
# pkg_info|wc -l
     216
Оборудование в среднем распознается без проблем:
# pciconf -lv
...
ohci0@pci0:0:4:0:       class=0x0c0310 card=0x83e21043 chip=0x0aa510de rev=0xb1 hdr=0x00
    vendor     = 'NVIDIA Corporation'
    class      = serial bus
    subclass   = USB
ehci0@pci0:0:4:1:       class=0x0c0320 card=0x83e21043 chip=0x0aa610de rev=0xb1 hdr=0x00
    vendor     = 'NVIDIA Corporation'
    class      = serial bus
    subclass   = USB
ohci1@pci0:0:6:0:       class=0x0c0310 card=0x83e21043 chip=0x0aa710de rev=0xb1 hdr=0x00
    vendor     = 'NVIDIA Corporation'
    class      = serial bus
    subclass   = USB
ehci1@pci0:0:6:1:       class=0x0c0320 card=0x83e21043 chip=0x0aa910de rev=0xb1 hdr=0x00
    vendor     = 'NVIDIA Corporation'
    class      = serial bus
    subclass   = USB
hdac0@pci0:0:8:0:       class=0x040300 card=0x84271043 chip=0x0ac010de rev=0xb1 hdr=0x00
    vendor     = 'NVIDIA Corporation'
    class      = multimedia
    subclass   = HDA
ahci0@pci0:0:11:0:      class=0x010601 card=0x83e21043 chip=0x0ab810de rev=0xb1 hdr=0x00
    vendor     = 'NVIDIA Corporation'
    device     = 'MCP79 AHCI1 (MCP79)'
    class      = mass storage
    subclass   = SATA
vgapci0@pci0:3:0:0:     class=0x030000 card=0x83e21043 chip=0x087d10de rev=0xb1 hdr=0x00
    vendor     = 'NVIDIA Corporation'
    class      = display
    subclass   = VGA
re0@pci0:4:0:0: class=0x020000 card=0x83a31043 chip=0x816810ec rev=0x03 hdr=0x00
    vendor     = 'Realtek Semiconductor'
    device     = 'Gigabit Ethernet NIC(NDIS 6.0) (RTL8168/8111/8111c)'
    class      = network
    subclass   = ethernet
...
# cat /dev/sndstat 
FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64)
Installed devices:
pcm0: <hda Realtek ALC887 PCM #0 Analog> (play/rec)
pcm1: <hda Realtek ALC887 PCM #1 Analog> (play/rec)
pcm2: <hda Realtek ALC887 PCM #2 Digital> (play) default
pcm3: <hda NVidia MCP7A HDMI PCM #0 Digital> (play)
Процессор тоже вполне настоящий:
CPU: Intel(R) Atom(TM) CPU  330   @ 1.60GHz (1600.03-MHz K8-class CPU)
  Origin = "GenuineIntel"  Id = 0x106c2  Family = 6  Model = 1c  Stepping = 2
  Features=0xbfe9fbff
  Features2=0x40e31d
  AMD Features=0x20100800
  AMD Features2=0x1
  TSC: P-state invariant
real memory  = 4294967296 (4096 MB)
Physical memory chunk(s):
0x0000000000001000 - 0x0000000000047fff, 290816 bytes (71 pages)
0x0000000000058000 - 0x000000000009afff, 274432 bytes (67 pages)
0x0000000001bbb000 - 0x00000000c9d91fff, 3357372416 bytes (819671 pages)
avail memory = 3338301440 (3183 MB)
Event timer "LAPIC" frequency 0 Hz quality 500
ACPI APIC Table: <020110 APIC1033>
INTR: Adding local APIC 2 as a target
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 1 package(s) x 2 core(s) x 2 HTT threads
 cpu0 (BSP): APIC ID:  0
 cpu1 (AP/HT): APIC ID:  1
 cpu2 (AP): APIC ID:  2
 cpu3 (AP/HT): APIC ID:  3
APIC: CPU 0 has ACPI ID 1
APIC: CPU 1 has ACPI ID 3
APIC: CPU 2 has ACPI ID 2
APIC: CPU 3 has ACPI ID 4
Есть кое-какая поддержка power management фичей:
# sysctl dev.cpu.0
dev.cpu.0.%desc: ACPI CPU
dev.cpu.0.%driver: cpu
dev.cpu.0.%location: handle=\_PR_.P001
dev.cpu.0.%pnpinfo: _HID=none _UID=0
dev.cpu.0.%parent: acpi0
dev.cpu.0.temperature: 56.0C
dev.cpu.0.freq: 1600
dev.cpu.0.freq_levels: 1600/-1 1400/-1 1200/-1 1000/-1 800/-1 600/-1 400/-1 200/-1
dev.cpu.0.cx_supported: C1/0 C2/1 C3/85
dev.cpu.0.cx_lowest: C1
dev.cpu.0.cx_usage: 100.00% 0.00% 0.00% last 279us
Процессор поддерживает C3, но включение его вызывает очень сильное падение производительности (дождаться даже установки пекеджа становится проблематично). Всё уменьшение частоты исключительно через acpi throttle. Поэтому, а так же потому, что за всё время наблюдений я не видел чтобы температура процессора доходила хотя бы до 65C, я не включал никаких power management функций.
Видеокарта нормально распозналась X -configure:
Section "Device"
        Identifier  "Card0"
        Driver      "nvidia"
        VendorName  "nVidia Corporation"
        BoardName   "G98 [GeForce 9300M GS]"
EndSection
На подключенный по hdmi телевизор тоже картинка сходу пошла, только не захотел сам выставить максимальное разрешение. Но кручение через nvidia-settings с последующим переносом настроек в xorg.conf всё полечило.
Да, на current драйвер nvidia надо ставить последний с сайта nvidia (у меня это 256.44), а не то, что сейчас в портах. Для быстрой и удобной установки можно просто немного поправить порт: поменять в нём DISTVERSION , после чего make makesum && make install clean .
Звук по hdmi передаваться не захотел. Кто виноват: видеокарта или драйер, я не знаю и пока не разбирался, а просто подключил акустику по оптическому кабелю в spdif. Но вообще звук по hdmi с nvidia под freebsd передается: я сам это проверял на своём ноуте как только вышли драйвера nvidia под freebsd amd64.
Как обычно все аудиовыходы (задние штекеры, фронтальные, spdif, звук на hdma) представлены в виде разных pcm устройств (я выше показывал). Несколько раз видел что людей такое смущает: они удивляются откуда на их компьютере (а особенно если это ноутбук) две звуковых карта, да еще и разных производителей. А вообще благодаря этому можно выбирать куда выводить звук или явно указывая программые нужный /dev/pcm , или выставив для всех hw.snd.default_unit .
Ну и, собственно, самое главное на данный момент: проигрывание hd видео. Для этого нужно собрать mplayer с поддержкой vdpau , прописать ему вот такой конфиг:
# cat .mplayer/config 
vo=vdpau
vc=ffh264vdpau,ffmpeg12vdpau,
ac=hwac3,a52,
и спокойно смотреть видео на прохлаждающемся процессоре:
PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
73587 levsha        1  49    0   215M 40660K nanslp  2   0:15  8.98% mplayer
Теперь о планах. Планируется прикрутить IR, перенести аудиоплеер на медиабокс, сделав на ноутбуке управление им хоткеями, поднять torrent client (посматриваю на transmission), спортироать xbmc, возможно поиграться с DLNA.

четвер, 12 серпня 2010 р.

htpc & nas & router своими руками

Долгое время я был поклонником домашних железок, которые выполняют свой достаточно узкий набор функций, но "just works".
В частности, этими железками были:
  • Asus wl-500GP v2:


    Один из самых функциональных soho роутеров после заливки на него альтернативной прошивки (я использовал dd-wrt)
  • Popcorn hour A-110:


    В своё время практически первый hd плеер, который стоил вменяемых денег и при этом играл практически всё, что содержит видео: любые mkv, iso образы, содержащие dvd/hd-dvd/bd, просто сброшенную на файловую систему структуру с dvd диска и т.п. В дополнение ко всему этому плеер сам прекрасно тягал с инета торренты с этими фильмами.
Но ситуация изменилась.
В связи с переездом и сменой интернет-провайдера с ethernet-домонета на adsl asus пришлось заменить на уже имевшийся у меня Linksys WAG-200 - adsl роутер со встроенным свичем и wifi AP. Железка не самая дешевая, но при этом оказавшаяся страшно глупой: из вещей, которые хотелось бы иметь, нет приоритезации трафика, нет static leases в dhcp сервере.
popcorn стал виснуть на закачке torrent файлов. То ли какое-то обновление ему не понравилось, то ли резко похудавший канал, то ли еще чего. Кроме того он и раньше иногда вис на сильно сложных файлах. И таки не играл некоторые файлы.
Захотелось иметь не просто карман, в который легко вставляются диски (как сейчас), а какой-то более серьезный NAS для файлов, с резервированием и всё такое.
Так начала зреть идея собрать домой системный блок, который и будет выполнять все эти функции. Но при этом ставить обычный системних не хотелось: большой, возможно еще и шумный, совсем не подходящий по виду. Поэтому неспешно рассматривались варианты на базе mini-ITX платы.
Рассматривались долго: все попадавшиеся на глаза корпуса или выглядели страшно, или были рассчитаны на установку только одного жетского диска (часто еще и 2.5"). Пока не подсказали вот такой вариант:


Вот с покупки этого корпуса и началась вся сборка. Корпус называется Chenbro ES34169, рассчитан под установку mini-ITX материнки, имеет 4 hot swap отсека под 3.5" диски. На морде стоит кардридер по SD и MS, 2 USB разъема (и то и то внутри корпуса подключается кабелем на usb разъемы материнской платы). Еще на морде есть окошко под установку IR приёмника. Вообще было бы логично увидеть там уже установленный приёмник (особенно с учетом немалой цены корпуса), но chenbro решили иначе... Морда закрывается полупрозрачной крышкой на петлях и магнитых защелках, что очень кстати: светодиоды при открытой крышке светят сильно ярко, а вот через закрытую свет становится на уровне "видно если специально посмотреть на корпус".
В задней части стоят два вентилятора, которые продувают блок питания и карманы с дисками. Специального продува для остека с материнской платой нет (вероятно считается что это уже заботы системы охлаждения самой материнки). Если подключать вентиляторы напрямую к БП (на одном из кабелей питания, идущих из БП, есть специальные разъемы для этого), то они будут работать на полных оборотах. При этом они шумят. Не так чтобы очень громко (где-то на уровне обычного офисного системного блока), но для домашней машинки хочется тише. Решение простое: вентиляторы нужно подключить на разъемы на материнской плате, после чего в bios setup включить fan control. bios сразу снижает обороты вентиляторов практически вдвое, что очень благоприятно сказывается на уровне шума. На практике решение оказалось не очень то и простым: только один кабель без проблем доставал к разъему на материнской плате. Сначала подумывал купить где-нибудь на ebay удлиннитель, но потом обошелся без него: вентилятор с недостающим питанием был откручен, повернут на 180 градусов (по оси вращения) чтобы выход кабеля стал смотреть в другую сторону, после чего кабель питания был запущен с другой стороны перегородки в отсек материнской платы.
При этих всех манипуляциях обнаружился момент с выходами под вентиляторы на плате. Их три: cpu, chassis и power. Частота вращения снимается для всех трех, но регулируется только для двух первых. Поэтому корпусные вентиляторы были повешены на cpu и chassis.
Выбор mini-ITX плат сейчас на первый взгляд большой, но на практике очень легко отсевается большинство из них. Естественно сразу отбрасываются все с впаянным celeron. Туда же идут все на базе atom с интегрированной графикой от intel - они не потянут full hd. В результате остаются платы на base nvidia ion и платы под socket 775 и socket 1156. Варианты с socket 1156, конечно, интересны. Но вот только в корпусе БП на 120Wt, а у Core i3/i5 согласно intel.com TDP 72Wt. А ведь надо еще питать саму материнку и 4 диска. Да и отводить эти 72Wt надо будет. socket 775 не хочется тоже из-за подозрений с питанием и теплоотводом. Да и вариантов на нём мало, и те часто на интеловской интегрированной графике. Кроме того необходимо наличие 4-х SATA разъемов на материнке (а zotac любит делать 3, судя по всему жертвуя четвертый на eSATA). Итого остаются платы на базе atom 330 и чипсета nvidia ION с интегрированной в него графикой GeForce 9300M GS. Из них часть опять же бракуется по отсутствию 4-х SATA.
В результате я выбрал Asus AT3IONT-I:


Плата обладает полностью пассивным охлаждением чипсета и процессора, 2-мя слотами под DDR3 память (куда сразу было куплено 2 планки по 2GB), PCIe x16 слотом, разъемом rs232 на плате. Остальной набор портов достаточно стандартен: gigabit ethernet, куча usb, еще есть ps/2 для клавиатуры, аналоговый и цифровой оптический выход звука, vga и hdmi (DVI нет, но мне не нужен, а кому надо, те могут купить кабель-переходник hdmi - dvi-d). Из установленных 4GB оперативной памяти системой видится только 3GB: об этом явно сказано в документации на материнску плату (особенности то ли чипсета, то ли процессора). На плате (в отличие от некоторых zotac) нету wifi, но мне не надо (планирую оставить внешний), а если надо будет, то можно будет поставить в PCIe.
Итак, всё это собрано, минимально настроена операционка, гонялось тестовое видео. full hd видео с применением VDPAU идет без каких-либо проблем. При этом загрузка процессора не доходит до 10%. Никаких настроек по экономии питания в операционке не делалось. Но при этом всём температура проессора всегда держится в пределах 55-60C (максимум, что видел, это 62C).
Из возможно hardware проблем пока есть только отсутствие звука на hdmi выходе. Но скорее всего виноват драйвер. Так что звук пока пустил по оптическому цифровому выходу.
Цену всего этого писать не буду: смотрите сами в ваших локальных прайсах.
Про установку и настройку системы опишу отдельно.

суботу, 7 серпня 2010 р.

mutt & imap

В mutt есть поддержка imap, вполне себе рабочая. Но есть некоторые нюансы:
  • нет offline mode (хотя письма mutt и кеширует)
  • синхронизация прочитанных/удаленных писем делается не сразу по прочтению/удалению, а по нажатию специальной клавиши или по переходу в другую папку. И если к моменту синхронизации связь с сервером оборвалась, то информация, которую нужно засинхронизировать, просто теряется
Отказываться от imap полностью и переходить на fetchmail не хочется: теряется возможность читать почту с телефона и через webmail.
Возвращаться к чтению почты в mutt прямо на сервере тоже не хочется: в своё время я ушел от этого потому, что не хочу держать свой pgp ключ на сервере и заниматься поддержкой pgp database на сервере. Да и опять же хочется иметь offline mode.
Решением всего этого стало использование программы offlineimap: запущенная программа периодически синхронизирует imap ящик с локальным maildir, mutt работает со своим любимым локальным maildir. Настройка offlineimap и mutt есть в offlineimap faq.

пʼятницю, 6 серпня 2010 р.

Хозяйке на заметку: если у вас usb не в ядре, а модулями

... то не забывайте подгружать usb_quirk.ko . По умолчанию он не прописан в module_depend у других usb модулей, а в модулях стоит заглушка: если usb_quirk нету то считаем что нету никаких квирков.
К владельцам ядер с включенным в ядро usb это не относится.
Ликбез: quirk-ки содержат описание причуд некоторых некоторых моделей некоторого оборудования: "это оборудование не поддерживает комманду SYNCHRONIZE CACHE", "это оборудование должно обрабатываться драйвером ugen, хотя оно рапортует про себя что оно uhid" и т.п.

вівторок, 27 липня 2010 р.

"Сверхудобный" интерфейс с короткими/длительными нажатиями клавиш на девайсах

Любители делать железки, где всё отображается одним многоцветным светодиодом, а всё управляется одной кнопочкой, будут вариться в котлах в аду. Но им будет дан пульт с одной кнопочкой: если через 0.6 секунды после 18-го мигания диода красным цветом и 39-го мигания диода зеленым цветом 57 раз с интервалом в 0.7 секунды нажать эту кнопочку, то температура смолы опустится на 1 градус. Любые другие действия будут приводить к повышению температуры смолы.

неділю, 25 липня 2010 р.

Решение проблемы с micro-usb на desire

Решение выглядит так:
То есть это просто переходник с mini-usb, который можно найти где угодно, на micro-usb в телефоне. Переходник стоит $2.50, спокойно помещается в отделении для монет кошелька.

Покупки на DealExtreme

Есть такой интернет-магазин китайского барахла http://www.dealextreme.com/ . Достаточно много вещей там можно купить за очень мало денег, причем всё продается с бесплатной доставкой. Оплата всего через PayPal
Нашел я там пару кабельков интересных и присмотрел bt гарнитуру. Заказал это всё 8 июля (точнее уже 9 июля, так как дело было после 12 ночи). 10 июля они мне это отправили. 15 июля оно ушло из Гонконга. 19 июля прибыло в Киев.
Если бы по адресу моей прописки (куда я и заказывал доставку) сразу в тот день заглянули в ящик и увидели бумажку о том, что на почте меня ждет посылка, то, наверное, в этот же день я её и забрал бы. А так 21-го меня спросили "как твоя посылка?", и я сам задумался "а как там она?" В результате на сайте укрпочты была обнаружена возможность трекинга таких посылок. Трекинг мне сообщил что оказывается посылка мне вручена 19-го числа... Последующее общение с моим отделением всё поставило на свои места: ни про какие трекинги они не знаю, посылка на моё имя есть, ждёт меня на почте. Так что судя по всему наша укрпочта сразу по прибытию в Киев ставит лдя посылки статус "вручено", потому как в районных отделениях никто этим всем заниматься не будет.
P.S. А bt гранитура оказалась фигней.

четвер, 15 липня 2010 р.

Еще о недостатках desire

Вспомнился еще один, который я пофиксил: из-за выступающей и легко нажимаемой кнопки питания и достаточно простого движения для разблокировки иногда телефон разблокировался находясь в кармане. Решением стало установить пароль. Пароль, кстати, прикольно сделан: площадка из 9 точек, по которым нужно в правильном порядке провести.

Используемый мною на андроиде софт

Его на самом деле немного. Штатный перечислять не буду, перечислю только установленный мною.
  • Task Manager от Rhythm Software - киляет висящие в памяти ничего не делающие программы и тем самым экономит аккумулятор
  • Jabiru - jabber клиент
  • Nagroid - клиент системы мониторинга nagios
  • ColorNote - заметки/чеклисты с возможностью защиты паролем (который я уже успел благополучно забыть)
  • gReader - rss reader, берущий данные из google reader-а (штатный rss reader не подходит именно потому, что он сам тянет, а не синхронизируется с гуглом, где у меня уже куча подписок)
  • AndNav2! - gps навигатор с возможностью кеширования карт для offline работы (использует карты openstreetmap)
  • File manager от Adao Team
  • Barcode Scanner - сканирует двухмерные штрихкоды, которые могут содержать визитки, url etc (сканирует как с поверхностей, так и с экрана компьютера)
  • Speedtest.net
  • Shazam - узнавалка песен
  • ConnectBoot - ssh клиент

HTC desire: месяц пользования

Решил чего-то написать, и обнаружил что прошел ровно месяц. А буду сегодня писать в основном о недостатках.
В принципе всем известный недостаток: очень жрет аккумулятор. У меня полной зарядки хватает дня на полтора. Правда у меня и условия не самые легкие: постоянно включенный wi-fi, постоянно работающий 3g интернет (jabber, nagios client, почта)
В предыдущих моделях HTC используется хитрый разьем, совместимый с mini-usb, что было большим плюсом: mini-usb кабель можно найти где угодно. В desire же они какого-то фига поставили micro-usb. Я пробовал найти этот кабель в магазинах. Безуспешно. А кабель этот это единственное средство зарядки телефона. Но хорошо что на втором конце кабеля обычный usb разьем: втыкай куда угодно.
На солнце экран практически не видно. Прикрывание своей тенью помогает слабо.
А вообще большинство постов за последний месяц (включая этот) было написано с этого телефона.

середу, 14 липня 2010 р.

Банковский софт, какой он бывает

Эх, все бы так делали: http://ithappens.ru/story/3582
Мой опыт общения со всякими клиент-банками и интернет-клиент-банками в принципе не большой, но немного тоже есть.
Первым банком был приватбанк, с которым я работал как СПД. Было это где-то в году 2003-2004.
Когда решил завести интернет банкинг, в отделении сказали что надо явиться с флешкой и они всё туда сбросят. На дискетку нет, не влезет. На диск не запишут: писалки нету. Своей флешки тогда еще и не было (ну просто не нужна была), поэтому пришлось одолжить. После следующего похода на флеке было обнаружено полное отсутствие всех файлов, которые на ней были раньше (хорошо хоть предусмотрел такой исход и всё сбекапил) а наличие двух файлов: .doc файла на пару десятков килобайт с инструкцией куда мне нужно зайти, что скачать и что запустить, и .ppt файла на пару мегабайт, в котором мне расписывалось в красках как мне теперь классно будет. На дискету оно не влезло бы из-за этого очень нужного .ppt файла. Да, инструкцию на самом деле можно было и с сайта скачать, что я сделал еще раньше.
Но это всё только начало. Дальше скачиваю я с сайта их клиент-банк, который написан на java, но работает исключительно под windows, генерирую в программке публичный и приватный ключ, скидываю публичный ключ на флешку и отправляюсь в банк с флешкой. Всё, как в инструкции. По возвращению обнаруживаю на флешке: мой публичный ключ, чей-то приватный ключ, подписанный публичный ключ. Попытки подсунуть их программе этот подписанный публичный ключ не дают позитивных результатов. После некоторого времени ковыряния обнаруживается, что подписанный публичный ключ это пара к тому приватному ключу, что валяется на флешке. То есть сотрудники отделения проигнорировали принесенный мною публичный ключ (и свои инструкции) и сами сгенерировали пару ключей, подписали и скинули это всё мне на флешку. Замечательная криптозащита, правда?
Но и это еще не всё. В дальнейшем оказалось, что через их программку я спокойно смотрю всю информацию по своим счетам, но ни одна из подписанных и отправленных мною платежек не проходит. После долгого общения с отделением мне был выдан телефон программистов и указание иметь мозги звонить им. После пинания программистов оказывается, что у меня гранаты не той системы: отныне они всем новым клиентам дают доступ через интернет-клиент-банк, сделанный в виде java-applet на их сайте, а поддержка клиента в виде standalone java программы, которую дали мне, осуществляется только для старых клиентов.
Клиент в виде java-applet был написан тоже прекрасно: работал только под IE. И только где-то через полгода они его доделали до уровня, что он стал кое-как работать под firefox с установленной java (и даже под FreeBSD): нужно было всего лишь наловчиться правильно попадать мышкой в пункты всплывающих меню, которые, естественно, всплывали совсем не там, где должны были.
В то время приватбанк был чуть ли не самым продвинутым в плане поддержки работы через интернет...
P.S. Интернет-банкинг текущего банка, где я держу свою пластиковую карточку, фактически представляет собой обычный сайт, работающий под любым браузером (проверенно браузером iPhone и lynx). А для аутентификации используются временные пароли, которые высвечивает на своём жидкокристалическом индикаторе специальный брелок, не требующий вообще подключения к компу, не говоря уж о каких-либо драйверах.

пʼятницю, 9 липня 2010 р.

СБ банка

Вчера после 12 ночи заказываю на иностранном интернет-магазине немного всякого барахла. Оплачиваю через PayPal. PayPal говорит что не может оплатить с этой карточки, которую я ему сказал. Вспоминаю что я сам же специально ставил на эту карточку достаточно низкий лимит на общую сумму операций в сутки (чтобы кто-то из нечестных магазинов не слил с карточки кучу денег), и что сейчас я пытаюсь заплатить явно бОльшую сумму, чем этот лимит.
Через пару минут после этого звонят с банка (да, после 12 ночи): "Вы только-что не делали никаких попыток оплаты своей кредитной картой через интернет? Это Вы были? Хорошо. Потому что сработал лимит, да и сумма заметно больше Ваших обычных платежей. Извините за беспокойство! До свидания!"
По моему такие беспокойство заметно повышают люяльность клиентов. По крайней мере мне понравилась такая работа.
P.S. Лимит я потом сам изменил через интернет-банкиг, после чего всё оплатил.

четвер, 8 липня 2010 р.

HTC desire & wi-fi

На работе в подвале стоит wi-fi точка от linksys. Красивая, b/g/n, но очень маломощная: iPhone и ноутбук видят её на улице только если стоять напротив окна из подвала. И только desire ловит точку из беседки, находящейся в стороне

понеділок, 5 липня 2010 р.

Шумахеры на дорогах

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

Полная шара закончилась


*з 1.07.2010 для абонентів тарифного плану «ОГО!Мобільний 256» після скачування/прийому 5 Гбайт трафіку  в мережі Укртелеком, а для абонентів «ОГО!Мобільний Необмежений» - після 10 Гбайт швидкість встановлюється до 64 Кбіт/сек на приймання та до 32 Кбіт/сек на передавання даних. Доступ до Інтернету на вказаній швидкості діє до кінця календарного місяця та розповсюджується на передачу даних в мережі Укртелеком, у національному та міжнародному роумінгу. З початком нового календарного місяця швидкість доступу до Інтернету встановлюється згідно з умовами тарифного плану абонента.

(C) http://www.ukrtelecom.ua/services/customers/mobile/tariff/internet

неділю, 4 липня 2010 р.

Удлиннитель на 6 розеток: это много или мало?

Обычная такая подготовка к покатушке на весь день. Включены:
  1. зарядка к одной мобилке
  2. зарядка ко второй мобилке
  3. зарядка с аккумулятором фотика
  4. зарядка к рации
  5. зарядка с пальчиковыми аккумуляторами для фары
  6. зарядка с аккумуляторами cr123 для фонарика
В детстве в моей комнате не было розетки вообще. И только когда переделывали печку, в комнату заодно протянули _одну_ розетку

четвер, 1 липня 2010 р.

copy-paste между компом и мобилкой

Задача: скопировать какой-то текст (допустим url) c компьютера на мобилку. Как её будет решать обычный человек? Правильно - вручную перенаберет. Просто и терпимо по скорости.
Как его будет решать помешанний типа меня? Погуглит, найдет что то, что надо, называется QR Code, установит соответствующую утилитку, потом на компе сделает

qrencode -o- http://blog.levsha.me |xv -

а на мобилке запустит QR Code/barcode scanner и сосканирует эту картинку :)
P.S. Сотрудник, которому было продемонстрировано таку методику copy-paste, сказал "наконец то я буду знать зачем в телефоне нужна камера"

неділю, 20 червня 2010 р.

Чехия: проход через границу

Не смотря на то, что проход украино-польской границы был простым (из автобуса мы не выходили, поляки делали только выборочный досмотр сумок, украинцы, похоже, вообще не делали), проход занял 3,5 часа: 2 проверка документов украинцами и 1,5 поляками. И буквально сразу после перехода обнаружилось (и потом подтвердилось) что самая бесполезная в Европе валюта это доллары: они годятся только для обменников (и то не для всех). В то же время что в Польше, что в Чехии очень много где кроме местной валюты принимают евро: от многих кафешек до кофейных автоматов. Но кредитки работают. Поэтому кофе попил на заправке, расплатившись кредиткой

Чудеса локализации

Захожу на гугл, а он на чешском.
Надо будет проверить выдает ли браузер в HTC preferred languages серверу или нет. Но не удивлюсь если гугловци решили его игнорировать (хотя это и не правильно)

четвер, 17 червня 2010 р.

Дороги по Украине

А в Ровенской области фигня с дорогами не только в направлении Ягодына: в направлении Львова та же фигня.
А вот во Львовской области интереснее: дороги относительно ухоженные, с нормальным покрытием, но постоянно петляют и очень часто по полосе в каждом направлении.
А аккумулятор в HTC уже практически сел...

Чехия: выезд

Выезд начался весело: в самый последний момент выходя из дому порвал свои custom наушники-гарнитуру (гарнитура iPhone, в которой вместо штатных затычек припаяны koss porta pro). Они кроме нормального звука хороши были еще и тем, что подходили и к iPhone, и к HTC. Взял затычки из комплекта к HTC чтобы хоть что-то было.
Итак, уже в автобусе. Сейчас отправляемся. Автобус setra, на полтора этажа (на втором этаже места на всю длину, на первом до середины). Переставлять SD карточки между фотоаппаратом и телефоном пока влом. Поэтому фотки будут позже.
Итак, автобус поехал :)

вівторок, 15 червня 2010 р.

Теперь я поддерживаю две мобильных операционки

С четверга кроме своего старого iPhone 2g я являюсь еще и обладателем железки на Android: HTC desire.
Первые впечатления очень положительные: клавиатура, наверное, еще удобнее ямобилковой: легкая вибрация при нажатии клавиш очень удобна, автодополнение с вариантами выбора тоже классно сделано (да и само дополнение работает очень хорошо). Правда неудобно то, что что клавиши с вариантами по удержанию клавиши есть только в английской раскладке. Ну и удивляет полное отсутствие других раскладок, кроме русской и английской. При этом русская еще и немного странная: самые правые клавиши вынесены в четвертый ряд.
А вообще жить можно: этот текст на новой железе и набран.
И, так как мой троллейбус уже практически приехал, то продолжение потом

понеділок, 14 червня 2010 р.

Тараканы в мире антивирусов windows

Несколько человек пожаловались что у них антивирус кричит "infected" на мой блог. Предложил им пожаловаться в google. А потом один из жаловавшися раскопал, что оказывается антивирусы кричат "вирус" на мою заметку Тараканы в мире windows
Так что чтобы не смущать народ выложил там описание картинкой :)

понеділок, 31 травня 2010 р.

Без ГМО

В связи с новыми заскоками с наклеиванием надписи "без ГМО" на абсолютно все продуткы, включая соль и минералку, аж захотелось найти что-нибудь в продаже с ГМО

понеділок, 24 травня 2010 р.

Есть же еще порядочные люди

В процессе катания распития пива на ВДНХ потерял велосипедные очки (дурацкая привычка снятые очки цеплять на шлем, где они и остаются после снятия шлема и потом выпадают в процессе тягания шлема на руле). Проехался по маршруту следования и не нашел. Но в конце маршрута поиска освистали ребята из ларька, где брали пиво, и вернули очки :)

неділю, 16 травня 2010 р.

Тараканы в мире windows

Они там, похоже, считают вирусы неприятным, но вполне терпимым явлением. На работе каждый раз как бухгалтер возвращается с налоговой или пенсионного, так на дискетке, на которой она туда отчеты носит, и приносит кучу вирусни. Я по этому поводу уже предложил купить ей вместо обычной флешки SD карточку с компактным переходником на usb: на SD карточках есть rw lock.
Но вообще я вспомнил об этом по другому поводу. Подключаю сегодня к ноутбуку свой GPS навигатор (он видится как обычный usb mass storage device), и обнаруживаю на нем такое:
"tmp.exe infected with Win32.HLLW.Lime.22" (c) http://vms.drweb.com/online/?lng=ru
Это мне так на майские праздники на авторизованной точке продажи Garmin обновили мою официально купленную карту...

zfs only system & geom_eli

Непосредственно с geom_eli грузиться нельзя: ни loader, ни никакой из boot-ов его не умеют и загрузить ядро оттуда не смогут. Поэтому делается схема с /boot на отдельном разделе, без geli.
Вообще для этого можно практически дословно вспользоваться инструкцией http://wiki.freebsd.org/RootOnZFS/UFSBoot , но наличие дополнительного ufs раздела мне не нравится: это fsck после unclean shutdown, отсутствие дешевых снапшотов (к хорошему привыкаешь быстро). Поэтому была взята за основу эта статья, http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot и вместе творчески доработаны до получения конфигурации с двумя zfs pool.
# gpart show ada0
=>       34  976773101  ada0  GPT  (466G)
         34         30        - free -  (15K)
         64        128     1  freebsd-boot  (64K)
        192       1856        - free -  (928K)
       2048   16777216     2  freebsd-swap  (8.0G)
   16779264    2097152     3  freebsd-zfs  (1.0G)
   18876416  957896719     4  freebsd-zfs  (457G)
Тут опять напоминаю владельцам дисков WesternDigital о желательности выравнивания начала разделов по 4K границе (gpart сам этого не делает).
swap в принципе может размещаться на zpool, но при этом не будет возможности получить crash dump ядра.
Понятно что на ada0 надо накатить pmbr и gptzfsboot
На 3-й раздел я повесил gpt label zboot для удобства. Использовать метку на 4-м разделе не получится: он должен быть размечен через geli с -b , а при этом ядро как только увидит geli label на ada0p4 , так сразу и запросит для него пароль, не зависимо от наличия gpt label
# geli list
Geom name: ada0p4.eli
EncryptionAlgorithm: AES-CBC
KeyLength: 128
Crypto: software
UsedKey: 0
Flags: BOOT
Providers:
1. Name: ada0p4.eli
   Mediasize: 490443119616 (457G)
   Sectorsize: 512
   Mode: r1w1e1
Consumers:
1. Name: ada0p4
   Mediasize: 490443120128 (457G)
   Sectorsize: 512
   Mode: r1w1e1
Кстати geli label содержит определенные метаданные, без которых получить данные с раздела не возможно. Поэтому не забывайте о необходимости сохранить их с помощью чего-нибудь типа
# geli backup ada0p4 /boot/geli.meta
Ну а дальше можно создавать два пула:
# zpool status
  pool: zboot
 state: ONLINE
 scrub: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        zboot        ONLINE       0     0     0
          gpt/zboot  ONLINE       0     0     0

errors: No known data errors

  pool: zdata
 state: ONLINE
 scrub: none requested
config:

        NAME          STATE     READ WRITE CKSUM
        zdata         ONLINE       0     0     0
          ada0p4.eli  ONLINE       0     0     0

errors: No known data errors
# zpool get bootfs zboot
NAME   PROPERTY  VALUE   SOURCE
zboot  bootfs    zboot   local
# zpool get bootfs zdata
NAME   PROPERTY  VALUE   SOURCE
zdata  bootfs    -       default
# zfs list -o name,mountpoint zboot
NAME   MOUNTPOINT
zboot  /zboot
# zfs list -o name,mountpoint,exec,compression -r zdata
NAME                       MOUNTPOINT            EXEC  COMPRESS
zdata                      legacy                  on       off
zdata/usr                  /usr                    on       off
zdata/usr/home             /usr/home               on       off
zdata/usr/local            /usr/local              on       off
zdata/usr/local/arch       /usr/local/arch         on      lzjb
zdata/usr/local/jails      /usr/local/jails        on       off
zdata/usr/local/tinderbox  /usr/local/tinderbox    on       off
zdata/usr/ports            /usr/ports              on      lzjb
zdata/usr/ports/distfiles  /usr/ports/distfiles   off       off
zdata/usr/ports/packages   /usr/ports/packages    off       off
zdata/usr/src              /usr/src               off      lzjb
zdata/var                  /var                    on       off
zdata/var/crash            /var/crash             off      lzjb
zdata/var/db               /var/db                off       off
zdata/var/db/pkg           /var/db/pkg             on      lzjb
zdata/var/empty            /var/empty             off       off
zdata/var/log              /var/log               off      lzjb
zdata/var/mail             /var/mail              off      gzip
zdata/var/run              /var/run               off       off
zdata/var/tmp              /var/tmp                on      lzjb
# ls -l /boot
lrwxr-xr-x  1 root  wheel  11 12 кві 18:30 /boot -> /zboot/boot
# fgrep zfs /boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:zdata"
vfs.zfs.debug=1
#
# cat /etc/fstab
# Device   Mountpoint      FStype  Options         Dump    Pass#
/dev/gpt/swap   none            swap    sw      0       0       0
tmpfs   /tmp    tmpfs   rw,size=3221225472      0       0
proc    /proc   procfs  rw      0       0
fdescfs /dev/fd fdescfs rw 0 0
linproc /usr/compat/linux/proc  linprocfs       rw,late 0       0
/dev/cd0                /cdrom          cd9660  ro,noauto,-CKOI8-U      0       0
Вот так оно и живет на моем ноутбуке. Уже больше месяца как.

середу, 12 травня 2010 р.

zpool on whoole disk or not?

zfs в своих метках, которые он сохраняет на все диски, входящие в zpool, зачем-то сохраняет имена vdev-ов, из которых он состоит. Зачем он там делает не понятно, ввиду того, что все-равно сохраняются и всегда проверяются еще и GUID-ы дисков. Наверное так делается для усложнения жизни.
На solaris оно вроде как не должно быть ничем страшно ввиду того, что там диски обзываются согласно их расположению. А вот на FreeBSD это чревато проблема в случае, когда съедет нумераци дисков (а она обязательно съедет после ребута с отвалившимся диском)
Оно то вроде и не особо страшно: zfs export && zfs improt и всё снова работает. Но все-равно дополнительные действия (а как поступать в случае zfs only system я вообще не представляю). Поэтому лучше таки так не делать.
Из обдуманых и нарытых в инете советов я дла себя выбрал создание одного большого GPT раздела с gpt меткой: по сравнение с glabel гарантия что не возникнет непоняток из-за вдруг обнаруженных в начале диска zfs меток, и вроде как более переносимо (теоретически, а говорят даже практически существует возможность импортировать в solaris pool, экспортированный из FreeBSD).
Кстати при разметке WD дисков сразу рекомендую не забывать про 4K сектора: gpart для GPT по умолчанию предлагает начинать раздел с 34-го 512B сектора, чего явно делать не стоит.

середу, 5 травня 2010 р.

Пляски с ZFS

Из цитат на #freebsd@RusNet:
zfs = оно то вроде работает, но если/когда она развалится, то что с ней делать не понятно вообще (c) levsha.
fsck не нужен, потому что не поможет (c) kib
"Вот наконец настал тот час", и zfs у меня поломался.
На сервере отвалился один диск (не из того пула, который потом сломался, а из другого). Но это отваливание как-то серьезно переклинило контроллер (да, adaptec говно), и посыпалась куча таймаутов от контроллера.
Полностью выключил сервер, подождал некоторое время и включил. В результате после загрузки получил панику. Попробовал удалить /boot/zfs/zpool.cache . В результате пулы перестали автоматически подключаться (совершенно справедливо) и стали видны по zpool import. При этом нужный пул стал помечен UNAVAILABLE, хотя он состял из одного raidz из 6 дисков, причем и raidz и все 6 дисков отображались как ONLINE.
Для ковыряний попробовал использовать zdb. Он при попытке запуска на пул падал по segmentation fault. Это оказалось плюсом: zdb использует тот же код, что и zfs.ko, но на user level, что, впервых, дает core dump вместо panic, во вторых позовляет использовать обычный gdb.
Ковыряния кода с помощью gdb показали, что где-то в душе вызывается zio_vdev_io_start() с zio->io_vd == NULL . Где и почему это происходит я не нашел. При этом zio_vdev_io_start считает что может справиться с такой ситуацией:
if (vd == NULL) {
if (!(zio->io_flags & ZIO_FLAG_CONFIG_WRITER))
spa_config_enter(spa, SCL_ZIO, zio, RW_READER);

/*
* The mirror_ops handle multiple DVAs in a single BP.
*/
return (vdev_mirror_ops.vdev_op_io_start(zio));
}
Вот только vdev_op_io_start совершенно не приспособлен до такой ситуаци: он в конце концов вызывает вот такую функцию:
boolean_t
vdev_is_dead(vdev_t *vd)
{
return (vd->vdev_state < VDEV_STATE_DEGRADED); }





за что сразу получает по голове (или sigsgev в случае zdb, или panic в случае zfs.ko).
Простенький патч вида
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
===================================================================
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c (revision 207555)
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c (working copy)
@@ -1845,6 +1845,10 @@
boolean_t
vdev_is_dead(vdev_t *vd)
{
+ if( vd == NULL ){
+ printf("XXX: Attemt to call vdev_is_dead for NULL vd\n");
+ return 1;
+ }
return (vd->vdev_state < VDEV_STATE_DEGRADED); }





панику исправил, вот только к работоспособности это не привело: теперь операции, которые проходили по этому коду, просто бесконечно долго ждали завершения io.
Дальнейшие ковыряния в направлении "а почему же этот пул помечается как UNAVALIABLE и что с этим можно сделать?" дали результатом такое: UNAVAILABLE пул считается тогда, когда zfs решил что некоторые устройства из пула недоступны, но не может определить какие именно. Для того, чтобы было возможно определить такую ситуацию, zfs записывает в каждый uberblock (The uberblock is similar to the superblock in UFS (c) ZFS On-Disk Specification) контрольную сумму идентификаторов всех устройств, входящих в пул. Поизучавши http://hub.opensolaris.org/bin/download/Community+Group+zfs/docs/ondiskformat0822.pdf была накалякана вот такая приблуда:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <errno.h>

#define UBERBLOCK_MAGIC 0x00bab10c /* oo-ba-bloc! */
#define UBERBLOCK_SHIFT 10 /* up to 1K */

typedef struct dva {
uint64_t dva_word[2];
} dva_t;

typedef struct zio_cksum {
uint64_t zc_word[4];
} zio_cksum_t;

typedef struct blkptr {
dva_t blk_dva[3]; /* 128-bit Data Virtual Address */
uint64_t blk_prop; /* size, compression, type, etc */
uint64_t blk_pad[3]; /* Extra space for the future */
uint64_t blk_birth; /* transaction group at birth */
uint64_t blk_fill; /* fill count */
zio_cksum_t blk_cksum; /* 256-bit checksum */
} blkptr_t;

typedef struct uberblock {
uint64_t ub_magic; /* UBERBLOCK_MAGIC */
uint64_t ub_version; /* SPA_VERSION */
uint64_t ub_txg; /* txg of last sync */
uint64_t ub_guid_sum; /* sum of all vdev guids */
uint64_t ub_timestamp; /* UTC time of last sync */
blkptr_t ub_rootbp; /* MOS objset_phys_t */
} uberblock_t;

int main(int argc, char* argv[]){

uberblock_t* ub = malloc(sizeof ub);
int res;

while( (res = read(0, ub, sizeof *ub) ) > 0 ){
if( ub->ub_magic != 0x00bab10c )
continue;
printf("ub_magic=%jx, ub_version=%ju, ub_txg=%ju, ub_guid_sum=%ju, ub_timestamp=%ju\n",
ub->ub_magic, ub->ub_version, ub->ub_txg, ub->ub_guid_sum, ub->ub_timestamp);

}
if( res < 0 ){ fprintf(stderr, "read(): %d\n", errno); } free(ub); return 0; }





На stdin пограммы были скормлены dd if=(тут перебираем все диски) bs=128k count=1 skip=(тут перебираем 1,3, последний и предпоследний блок на диске) . С блоками так потому, что zfs записывает на каждый диск 4 vdev label: две в начале и две в конце, и каждая vdev label заниает 256KBytes, из которых вторая половина это uberblocks array.
В моём случае было обнаружено что на нулевом диске несколько последних uberblock-ов содержат другую ub_guid_sum. Поэтому этот диск был просто вытянут, после чего zfs спокойно распознала этот пул.
Вот такое вот шаманство этот zfs...

четвер, 18 лютого 2010 р.

Их нравы

Программа, идущая в комплекте с EVDO модемом Novatel Wireless U720, не смогла под windows увидеть этот модем, аргументируя что кто-то другой уже занял этот модем. Ковыряние показало что скорее всего этим другим была другая программа, установленная ранее для UMTS модема Novatel Wireless Merlin XU870 . Просто убивание процесса проблему не решило.
Вот так вот, оба модема Novatel, но к каждому своя программа, конфликтующая одна с другой. Такая вот замечательная поддержка оборудования в M$ Windows. На всякий случай уточню что Windows Vista, с последним сервиспаком и всеми обновлениями.
Под FreeBSD надо было немного порзабираться с конфигом и chat скриптами для mpd, после чего всё работает без вопросов и прблем, хоть один, хоть другой, хоть оба сразу.

суботу, 13 лютого 2010 р.

Телепаты вышли с отпуска на работу.

Пошел постричься. Только сел в кресло и открыл рот чтобы рассказать как стричь, как парикмахер сама всё рассказала практически слово в слово с тем, что я думал сказать. Потом оболванила за 10 минут. И таки так, как и планировал.

Ждём очередные внеочередные выборы?

Звонок в дверь. Тётенька проводит соцопрос. Ну поопрошаюсь, мне не лень. Вопросы все на тему "Черновецкий плохой? Переизбирать надо? Почему плохой? Что должен сделать новый президент для Киева?"

четвер, 11 лютого 2010 р.

Я там был

Не чтоб показать какой галимый фотик в яМобилко, а просто чтоб похвастаться:

Но организаторы концерта реально ммммдаки.

неділю, 7 лютого 2010 р.

Переключение раскладок

Наконец то нашел то, чего давно хотел: включение нужной раскладки клавиатуры по определенной комбинации клавиш (это когда раскладки не переключаются по кругу, а при нажатии определенной клавишы/комбинации сразу включается английска, другой - русская, третей - украинская). Это может показаться не удобным на первый взгляд, но на самом деле это просто не привычно. В то же время по правилам построения интерфейсов это более правильно. Потому что задача то и есть "включить такую то раскладку", а не "включить раскладку на 2 вперед от текущей". И попытка её решения круговым переключением хуже тем, что нужно смотреть а какая раскладка сейчас включилась, вместо того, чтобы просто включить нужную, не зависимо от текущей.
Делал по заметке с хабрахабра: http://habrahabr.ru/blogs/linux/83223/

середу, 27 січня 2010 р.

Ethernet <->Wi-Fi failover

Простой случай: у вас есть одна сеть, доступная и по витой паре, и по wi-fi (очень распостраненная ситуация дома, а иногда и на некоторых фирмах). Хочется в случае подключения к витой паре работать через неё (чтобы быстрее), в случае отключения работать через wi-fi (для мобильности). Делается элементарно:
rc.conf:
#выставить на ethernet интерфейсе MAC с wifi интерфейса
# поднять оба интерфейса и запустить wpa_supplicant на wifi линке
ifconfig_em0="ether 00:16:ed:5d:6a:38 up"
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA up"
# объединить линки
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport em0 laggport wlan0 DHCP"

Сложный случай: есть разные сети, и только в некоторых из них wifi и ethernet это одна сеть, а в остальных разные. Тогда добавляем wlan0 в lagg только для сетей, которые мы явно указали.
rc.conf:
ifconfig_em0="ether 00:16:ed:5d:6a:38 up"
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA DHCP"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport em0 wlan0 DHCP"
Находим и правим секцию в devd.conf:
notify 0 {
        match "system"          "IFNET";
        match "type"            "LINK_UP";
        media-type              "802.11";
        action "/etc/wlan_up.sh $subsystem";
};
Содержимое wlan_up.sh:
#!/bin/sh

subsystem=$1

laggether="`ifconfig lagg0 |awk '/ether/ {print \$2}'`"
wlanether="`ifconfig ${subsystem} |awk '/ether/ {print \$2}'`"
ssid="`ifconfig ${subsystem} |awk '/ssid/ {print \$2}'`"

if [ "x${laggether}" = "x${wlanether}" ]
then
        if [ "x${ssid}" = "xasus" ]
        then
                ifconfig lagg0 laggport ${subsystem}
                exit
        fi
fi

/etc/rc.d/dhclient quietstart $subsystem
В моём случае wlan добавляется в lagg только для ssid asus и только в случае, если MAC адрес wlan интерфейса и lagg интерфейса совпадает (это сделано для того, чтобы не добавлять в lagg другие wlan интерфейсы - я еще иногда подключал usb wlan карточку)

суботу, 16 січня 2010 р.

Регулировка яркости в sony vaio

Работает! Оказывается надо всего лишь порыться в портах и нарисовать скриптик для того, чтобы в зависимости от текущей видеокарточки использовались разные программы:
#!/bin/sh

usage()
{
        echo "usage: $0 [value|+value|-value]" >&2
        exit 2
}

if [ $# -gt 1 ]
then
        usage
fi

ETC=/usr/local/etc/X11
if ( cmp -s ${ETC}/xorg.conf ${ETC}/xorg.conf.sony.intel )
then
        getcmd='xbacklight'
        setcmd='xbacklight -set '
        inccmd='xbacklight -inc '
        deccmd='xbacklight -dec '
else
        if [ $(id -u) -ne 0 ]
        then
                prefix='sudo '
        else
                prefix=''
        fi
        getcmd="${prefix}nvclock -i | awk '/Backlight/ {print \$3;}'"
        setcmd="${prefix}nvclock -S "
        inccmd="${prefix}nvclock -S +"
        deccmd="${prefix}nvclock -S -"
fi

if [ $# -eq 0 ]
then
        $getcmd
        exit
fi

case $1 in
[0-9]|[0-9][0-9]|100)
        ${setcmd}$1 
        ;;
+[0-9]|+[0-9][0-9])
        ${inccmd}${1#?}
        ;;
-[0-9]|-[0-9][0-9])
        ${deccmd}${1#?}
        ;;
*)
        usage
        ;;
esac
Теперь на минимальной яркости с выгруженным usb живет 4 часа.

неділю, 10 січня 2010 р.

Страна должна знать своих "героев"

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