Posts filed under ‘Uncategorized’

DNS-323: e2fsck

Допустим, хранилище выключилось в момент записи файла на диск. В этом случае получится неудаляемый inode. При его удалении будет ошибка: Input/output error rm.
В этом случае стоит прокрутить на устройстве e2fsck. Но устройство должно быть umount.
Беда с этим хранилищем в том, что telnet (из-за funplug) находится как правило на самом же устройстве, которое надо проверить. Просто umount сделать не получится. lsof показывает, что сам lsof, telnet и прочее находятся на /dev/md0 и device is busy. Мой опыт показал, что можно сделать lazy umount: e2fsck запустится, а telnet не отвалится. На все вопросы стоит соглашаться.

/ # df
Filesystem           1k-blocks      Used Available Use% Mounted on
rootfs                    9911      7569      1830  81% /
/dev/root                 9911      7569      1830  81% /
/dev/md0             958846504 143438640 815407864  15% /mnt/HD_a2
/dev/md1               3114924        28   3114896   0% /mnt/HD_b2
/dev/sda4               497861       184    497677   0% /mnt/HD_a4
/dev/sdb4               497861        11    497850   0% /mnt/HD_b4
/ # umount -l /dev/md0
/ # e2fsck /dev/md0
Реклама

Сентябрь 28, 2012 at 16:34 1 комментарий

dokuwiki: acl (управление доступом)

Чтобы гибко задавать права пользователям на просмотр и редактирование страниц в dokuwiki, необходимо соблюдать несколько простых правил.
0. Право Замечание в русском варианте == None. То есть доступа нет.
1. Права наследуются от корня к страницам. То есть если на корень пользователю дано право Правка, то бессмысленно давать право Замечание на отдельную страницу — оно просто не сработает. Этот пользователь сможет править любые страницы в вики.
2. Меньшие права поглощаются. То есть если на корень дано право Чтение, а на конкретную страницу — Правка, то Правка поглотит Чтение. И пользователь имеет право Правки.
3. На страницы нельзя давать право Удаление или Загрузка. Это применимо только к пространствам имен. Пространство имен — это то, что отображается как раскрывающийся пункт в листбоксе со списком страниц вверху слева в плагине Управление списками контроля доступа.

Итак, что делать: создаем группу или пользователя. Выделяем корень — самый верхний элемент в листбоксе со страницами и ставим право Замечание. А дальше раскрываем листбокс, по очереди выделяем страницы, которые можно читать или редактировать, и выставляем право Чтение/Правка на них для созданного пользователя. Таким образом, пользователь (группа) будут обладать разными правами на разные страницы.

Февраль 22, 2012 at 19:03 1 комментарий

fetchmail: socket error while fetching

После каких-то незабэкапленных изменений в конфигах, стала ловиться такая рыбка в mail.err:

Feb 15 15:35:47 jimmi fetchmail[21593]: socket error while fetching from kukuruku@gmail.cooom@gmail.cooom 

Невкусная рыбка. Потому что я не умею включать verbosity для fetchmail! И мне кажется, что почти никто не умеет. Я имею в виду не запуск с ключом -v, а опция к fetchmailrc, чтобы запускать его как службу, но с verbose.
Всякие советы про traceroute и удаление из очереди каких-то стопорящих дело писем не пошли.
Зато! я вспомнила, что зачем-то в какой-то момент удалила строчку protocol pop3 из раздела poll fetchmailrc. При этом письма продолжали забираться, а ошибка в логах была.
Так что протокол надо обязательно указать либо в defaults, либо индивидуально для каждого ящика в poll.
Пример:

set daemon 60
set  syslog
set no bouncemail
defaults:
  antispam -1 
  batchlimit 100
#  keep,                #не удалять почту на сервере после получения
#  fetchall     # получать всю почту

poll gmail.com
 with protocol pop3
 user "kukuruku@gmail.cooom" there
 with password 111 to example@internal.mail
 keep

Февраль 15, 2012 at 15:11 Оставьте комментарий

php: string contains substring

В php нет как такового contains или include для строк. Но есть суррогат — strpos($string,$substring); которая возвращает позицию $substring в $string. Функция возвращает 0 и в случае неудачи. То есть ей без разницы — нет этой substring в string или она расположилась в самом начале строки. Беда-беда. Поэтому надо быть аккуратным с такими конструкциями, как:

$pos = strpos($string,$substring);
if ($pos) return "Contains";
else return "Fail";

Необходимо проверять на строгое равенство/неравенство логическим true|false. Вот как-то так:

$pos = strpos($string,$substring);
if($pos !== false) return "Contains!";
else return "Fail!";

Февраль 9, 2012 at 14:19 Оставьте комментарий

.htaccess: 301 редирект php-страниц с параметрами.

Я не он, я только учусь) Из-за нужд seo пришлось делать этот самый безопасный для них redirect.
В Интернете много примеров, как пользоваться .htaccess, в частности есть отличная статья на хабре про его дао: тут.
Но там в основном рассматриваются варианты перенаправления статических html-страниц или классический случай домена с www и без него.
А что делать, если возникла странная задача: сделать редирект страницы http://www.example.ru/index.php?id=16 на http://www.example.ru/index.php?id=17 ?
Простой редирект(без RewriteEngine) не даст ничего или сайт упадет с ошибкой 500.
Сделать, как со статическими страницами: RewriteRule index.php?id=16 на /index.php?id=17 [R=301,L] тоже ничегошеньки не даст. Только сайт тут не упадет, что в принципе бонус.
Все дело в том, что в исходной строке есть параметры (все, что после знака вопроса).
Поэтому делаем так:

RewriteCond %{QUERY_STRING} ^id=16$
RewriteRule ^index.php /index.php?id=17 [L,R=301]

По сути это означает следующее: если в URL есть подстрока параметров id=16, то подставить /index.php?id=17, вместо того, что сейчас обрабатывается (а это все то же URL. RuleEngine параметры не смотрит, и URL для него просто строка — абсолютный путь до файла, содержащего страницу. Так что где .htaccess — там и «корень» URL. Кроме того, apache будет крутить эту строку столько раз через правила .htaccess, пока она не перестанет меняться.). enjoy!

Февраль 2, 2012 at 16:22 14 комментариев

QT: mingw, libgcc и прочее

Когда динамически собираешь проект для Windows в QT надо потом докладывать в папку к exe-файлу все использованные dll. Беда в том, что часто проверить негде (на своей машине-то вся среда есть и приложение по-любому работает): догадываешься, что нужно QtCore, QtGui, но обязательно что-то забудешь. И потом приносишь показать результат, а при запуске ошибки: не хватает mingwm10.dll, libgcc_s_dw2-1.dll и тп. При этом почему-то просто так потом их не найдешь по отдельности без целого Qt.
Еле нашла вот добрых людей, которые позаботились о таких, как я: здесь есть mingw и даже qtcore для win32

Декабрь 14, 2011 at 15:17 Оставьте комментарий

Преобразование в таблицу Excel текстового файла с CSV-разделителями.

Нередко возникает такая ситуация: какая-либо СУБД, или почтовый клиент, или еще кто-нибудь имеет возможность экспорта таблицы, адресной книги и прочего только в txt и в какой-то внутренний формат. А хотелось бы иметь возможность выгружать в красивую табличку, чтобы потом послать кому-то по почте или просто распечатать. Есть простой выход: Excel прекрасно открывает txt, а дальше VB в руки и мы получаем то, что нам нужно. (далее…)

Август 12, 2011 at 21:34 Оставьте комментарий