Ajattara and Verjnuarmu
| 09.05.2012 slyfoxЧудный финский black metal (не для впечатлительных :])
Чудный финский black metal (не для впечатлительных :])
Расскажу как я умудрился запороть :] и героически восстановить BIOS на старой материнке EPOX 8HMMI-A 2005 года выпуска.
seekwatcher is a nice tool written by btrfs author and primary maintainer Chris Mason.
It is designed to visualise seek-bound tasks.
Amount of seek() operations is about ~100-200 per second on rotational drives (5ms to reposition heads). The more your HDD is – the more seek latency will bite you.
Let’s look at a fun workload: cvs update on a large project: gentoo-x86 CVS tree.
Сегодня получил доступ к ppc64 коробке. Решил причесать ворох хаков в отдельный проект и забросил на gihtub как gentoo-chrootiez.
Тут наиподробнейшая последовательность действий, чтобы развернуть chroot.
Работает не только для gentoo, но в gentoo не нужно делать вообще ничего, чтобы получить rootfs. Распаковали stage3 – и можно заходить.
Недавно снова взялся за hackport. [ Это прога, которая позволяет конвертировать пакеты с hackage в оверлей gentoo-haskell. ]
Заметил я как-то однажды в lkml письмо от Rob Landley (больше всего знаменитого авторством busybox).
В письме описана проблема загрузки sparc32 ядра linux в qemu:
Boot time fixup v1.6. 4/Mar/98 Jakub Jelinek (jj@ultra.linux.cz).
Patching kernel for srmmu[Fujitsu TurboSparc]/iommu
Fixup i f029ddfc doesn't refer to a valid instruction at
f00de648[95eea000]
halt, power off
Далее »
Запилил вчера в layman свой оверлей:
Немного порассуждаем о явлении фрагментации во всяких файловых системах и как их можно избежать на при разработке файловой системы и при ее использовании.
Сегодня прочитал Silmarillion.
Нашел для себя «пару» неизвестных слов. Ссылки сгенерены скриптом, так что некоторые из слов переводов иметь не будут.
Возможно, моя опечатка или опечатка в книге (или слово из другого скандинавского языка). Сколько из них знаете Вы?
Я наконец-то прочитал весь креатив Азимова. Пара реквизитов (легко гуглится):
$ ls ...
"The Complete Asimov.pdf" 10812545 bytes
$ sha1sum "The Complete Asimov.pdf"
a500956f0baa18255fba31cb388358af5ab6b99b
Приведу список произведений, которые мне особо запомнились:
На этой неделе у меня появился очередной девайc: TP-LINK TL-WN722N. Задача-максимум была поднять его в Access Point режиме (master mode).
На gentoo-wiki оказась отличная статья.
Очередной поход на last.fm выявил еще несколько классных групп. Одна из них – веселые финские ребята: Noumena.
Приятный death с оттенками doom и humppa. Тексты англоязычные.
Иногда нужно запустить какую-то конкретную программу так, чтобы одна конкретная функция работала в ней не так, как обычно.
Примеры, когда это может понадобиться:
Попробуем перегрузить функцию exit() в glibc. Большинство UNIX позволяют принудительно вгрузить какую-то стороннюю библиотеку в адресное пространство запускаемой программы через глобальную переменную LD_PRELOAD.
Попробуем простой пример:
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <dlfcn.h>
void exit(int status)
{
void (*real_exit)(int status);
*(void **)&real_exit = dlsym (RTLD_NEXT, "exit");
fprintf (stderr, "<<<%s:Morning sir! I pass you to the %p function>>>\n", W, real_exit);
real_exit (status);
}
$ cc -g -O0 -fPIC -DW='"w1"' main.c -o stat_wrapper1.so -shared -ldl
$ cc -g -O0 -fPIC -DW='"w2"' main.c -o stat_wrapper2.so -shared -ldl
$ LD_PRELOAD="./stat_wrapper1.so ./stat_wrapper2.so" ls .
main.c makefile stat_wrapper1.so stat_wrapper2.so
<<<w1:Morning sir! I pass you to the 0x7fba1919a67c function>>>
<<<w2:Morning sir! I pass you to the 0x7fba18a38150 function>>>
Работает :]
В gentoo при сборке пакетов используется утилита sandbox, которая перехватывает функции обращения к файловой системе и ругается, когда при записи билд вылазит за дозволенные границы:
$ /bin/bash -c 'echo 1 > foo'
$ sandbox /bin/bash -c 'echo 1 > foo'
/bin/bash: foo: Permission denied
$ sandbox /bin/bash -c 'echo 1 > /tmp/foo' # а в /tmp/ - можно :]
Но внутри sandbox LD_PRELOAD не работает.
Продолжая тему нормальных utf-8 имён в firefox сегодня уконфигурим нормальное отображение utf-8 файлов по FTP.
TL;DR:
about:config: intl.config.default: windows-1251 -> utf-8
Сегодня решил проверить, не починили ли сборку на ghc альфе. Патч Саймона окончательно всё исправил, и теперь у нас есть надежда на ghc-7.2 с полным составом поддерживаемых архитектур.
На радостях я решил посмотреть, как там жизнь на alpha и увидел, что демон nrpe засирает dmesg невыровненным доступом:
$ dmesg
...
do_entUnaUser: 2 callbacks suppressed
nrpe(1185): unaligned trap at 000002000011ab94: 00000001200401ec 2d 31
nrpe(1185): unaligned trap at 000002000011ab94: 00000001200401f4 2d 31
nrpe(1185): unaligned trap at 000002000011ab94: 00000001200401fc 2d 31
nrpe(1185): unaligned trap at 000002000011ab94: 0000000120040204 2d 31
nrpe(1185): unaligned trap at 000002000011ab94: 000000012004020c 2d 31
Решил попробовать исправить. Здесь прочитал про хак с включением SIGBUG на unaligned access через очень странный недокументированный и неэкспортируемый glibc системный вызов osf_setsysinfo.
Естественно, программа не работала :] Результат – патч в ядро. Не знаю, помогает или нет (ядро грузнуть гнегде :]), но найти ошибку заняло минут 20 таращенья в git log. mattst88 подсказал, что для поиска таких штук еще есть prctl (и я дописал упоминание о нем в док).
На arm я unaligned access искал с помощью обычных breakpoints в gdb:
$ gdb -p $pid
break *(0x${pc-of-faulty-insn})
continue
Тут это не сработало из-за того, что nrpe довольно корявый, постоянно форкающийся, снижающий привилегии маложивущий демон. Пришлось немного повозиться, чтобы вычислить, что ошибка в openssl. Правда, я ее еще не до конца отследил.
Зато нашел баг в strace. Патч в апстриме.
UPDATE:
Баг таки выловил и их там оказалось даже 2! Даже патч послал, но апстрим оказался быстрее.
Этот пост будет про unsafeInterleaveIO.
Часто хочется работать с IO данными, будто они являются ленивыми. Как hGetContents (или readFile), которая возвращает ленивую строку-содержание файла:
do by_line <- lines `fmap` readFile "/some/log/file"
-- дальше работает с by_line как с обычным ленивым списком
По мере необходимости при использваонии новых строк они считываются с диска, а чтобы файл закрылся – надо обработать все данные (с этим надо аккуратно).
Попробуем построить похожую функцию, которая получает данные из IO по мере использования.
15 Июня 2011 года вышел ghc-7.0.4. В оверлее он появился в тот же день. Это хорошая традиция.
Подготовка ghc к добавлению его в основное дерево gentoo-x86 заняла почти 2 месяца. На самом деле это очень быстро :] До этого были (традиционно неюзабельные) релизы ghc 7.0.1, 7.0.2 и 7.0.3, основываясь на которых мы уже слали патчи в разные апстримы, которые ломаются с каждой новой мажорной версией ghc. Так что к релизу 7.0.4 у нас всё более-менее собиралось.
В этот раз серьезным изменением было выбрасывание base-3 и обновление Cabal до 1.10 (появился новый интерфейс для тестов).
Когда я пытаюсь разобраться в новом коде – я беру свой любимый компилятор и пытаюсь пофиксить (или хотя-бы рассмотреть) большинство предупреждений, которые он выдает. Потом выворачиваю уровень выдачи предупреждений на максимум и всё начинаю сначала.
gcc -Wall -W -Wextra -Weff-c++
gcc --help=warnings # и еще штук 20 из этого списка :]
Далее »