Category: it

Category was added automatically. Read all entries about "it".

nepal

Про цвета в терминале

Современные эмуляторы терминала поддерживают 256 цветов. Но многие программы про это не знают, потому что эмулятор выставляет переменную окружения TERM=xterm, а в terminfo про xterm прописано, что у него 8 цветов:
$ echo $TERM
xterm
$ tput colors
8

Но может, у вас всё так и должно быть? Проверить легко -- запустить вот такой код:

for ((x=0; x<=255; x++));do echo -e "${x}:\033[48;5;${x}mcolor\033[000m";done
(если заменить 48 на 38, будет меняться цвет текста, а не цвет фона)

Если вам напечатают много красивых цветов, то, значит, ваш эмулятор терминала умеет 256 цветов. Что нужно сделать, чтобы об этом узнали программы? Да просто выставить TERM=xterm-256color (убедившись, что у вас есть такой файл в /usr/share/terminfo/x/). Лучше всего сделать сразу в настройках эмулятора терминала (у меня в XFCE Terminal это Preferences -> Advanced -> $TERM setting).

Потом можно посмотреть, что изменилось:
$ echo $TERM
xterm-256color
$ tput colors
256


Можно запустить vim и увидеть, что цвета чуток изменились (если вы используете цветовую схему и подсветку синтаксиса). Чтобы убедиться, что vim "увидел", что у вас 256 цветов, напишите :set t_Co -- в ответ должны увидеть t_Co=256.

И даже для color ls предусмотрена цветовая схема с 256 цветами (она потом сама подгрузится в /etc/profile.d/colorls.sh, когда bash будет исполнять profile, а пока сделаем ручками):
$ eval $(dircolors -b /etc/DIR_COLORS.256colors)
$ ls

Всякие разные ESC-последовательности для терминала можно посмотреть в man console_codes. Всё вышеприведённое справедливо для Fedora 9; your mileage may vary, there are no guarantees etc.
nepal

Запустил OpenVZ на ARM (Gumstix Overo)

Вот на этой самой железяке я таки запустил OpenVZ. Все детали в блоге OpenVZ.

Спрашивают, на фига это нужно, на таком мелком железе запускать виртуализацию, контейнеры какие-то. Отвечаем.

Мне видится, что, во-первых, для мобильников и прочих PDA контейнер — хорошая среда для запуска untrusted application. Скачали вы чёрт знает что из Интернета — пускай работает внутри отдельного урезанного контейнера.

Дальше, в роутерах тоже подобное железо стоит, соответственно, можно использовать модель «один сетевой сервис на один контейнер» для пущей безопасности и лучшего контроля за ресурсами. Безопасность — потому что если сервис дырявый, то будет скомпрометирован только он один. Ресурсы — наши хвалёные бинкаунтеры и всё прочее групповое (CPU, I/O scheduling), которого в ванильном ядре [пока] не хватает.

Развивая идею appliances — можно ведь и для «маленького» железа делать это. Скачал готовый настроенный образ, запустил, и всё. Как выразился сегодня koct9i, идеально для тупого админа, который сам не может поставить и настроить систему. В общем-то, и не для тупого тоже это хорошо — это ещё и fast provisioning, быстрое разворачивание.

Для «маленького» железа именно контейнеры хороши, потому как оверхед накладные расходы маленькие, производительность практически не падает.

Что скажете?

Update: ну что за напасть — и к этой записи начал сыпаться спам! Ввиду этого комменты скринятся. Спам буду удалять, не спам — расскринивать.
nepal

Mouse Keys, или Если у вас не работает NumLock

Если у вас вдруг никак не работают циферки на дополнительной цифровой секции клавиатуры (которая справа), а вместо этого происходит что-то странное, то это Mouse Keys -- эмуляция мышки с помощью клавиатуры. Это удобно и практически незаменимо, когда вдруг мышка не работает -- но неудобно, если вдруг хочется циферки на этой клавиатуре понабирать.

Так вот, включение и выключение этой функциональности работает поShift+Alt+NumLock. Для того, чтобы задать начальное состояние после запуска, надо в настройках мыши включить или выключить опцию Mouse Keys.

Ссылки по теме: wikipedia: MouseKeys.
nepal

microsoft exchange жжёт!

Значит, захотел я себе корпоративный IMAP. Таковой у нас есть только через MS Exchange. Но, говорят, нормально с Тандербёрдом работает.

И действительно, нормально (ну разве что тупит больше, чем мой собственный dovecot внутри VE -- я подумал, пусть, у него много юзеров и т.п.).

А вчера обнаружился глюк, и какой!

Создали новый список рассылки. Приходят мне с него письма. И в каждом в заголовке написано Reply-To: Foobar Bazz <foo@bar.mipt.ru> (* все имена и адреса изменены). Конечно, товарищ Foobar Bazz (реально существующий) к оному списку отношения вообще никакого не имеет. У всех остальных людей в этом месте написано Reply-To: proper@mailing.list.address, а у меня вот Foobar Bazz.

Сейчас смотрели на этот цирк вместе с админами. Так вот, письмо в базе лежит нормальное, через Outlook Web Access отдаётся с нормальными хидерами, через Outlook и "родной" его протокол тоже нормально отдаётся. И только через Exchange IMAP, и только для меня, и только для этого списка рассылки -- меняет содержимое Reply-To.

Нечеловеческая логика какая-то, чудовищный глюк.
nepal

смерть оракла

Сегодня shams мучала инсталлятор Oracle. Вываливается с SIGSEGV и всё тут. Уже несколько дней они его пинают... Сегодня допинали!

Оказалось, что в файле /proc/swaps, которое инсталлятор читает с помощью /bin/cat (у нас /proc/swaps внутри контейнера в старом ядре нет, поэтому мы подложили наш /bin/cat), в первой строчке (где заголовки) поля разделены табами, а во второй строчке (где, собственно, своп-девайс и всякие его характеристики) -- пробелами! Вот так вот примерно выглядит /proc/swaps, чтобы вы представляли, о чём речь:

$ cat /proc/swaps 
Filename                                Type            Size    Used    Priority <-- тут табы
/dev/sda3                               partition       2031608 80      -1       <-- тут пробелы

Ну вот, а у нас во второй строчке были табы. Оракловый инсталлятор не смог этого перенести!

Вероятно, его писали ну очень малогабаритныебюджетные индусы.
nepal

akpm

В среду вечером встречались с Andrew Morton. Я уже был с ним знаком, но близко поговорить удалось впервые. Сначала заехали ненадолго к нам в офис, а потом ужинать в "Сыр".

Затронули разные темы -- от (конечно же) продвижения OpenVZ в мейнстрим до автомобилей (у него какой-то особенно мощный Pontiac, наверное, Firebird или GTO) и сравнительной характеристики жизни в Москве, в Silicon Valley и в Австралии. Эндрю сказал, что в Австралии лучше всего.

Если не считать работы, у меня было к Эндрю два вопроса, и на оба я получил ответ. Ответ на первый практически вылез сам из сравнительного обсуждения производительности файловых систем -- в Гугл используют ext2, потому что им всё равно, если какая-то машинка, содержащая (поисковый) индекс, остановится на полдня для fsck -- все данные, содержащиеся на ней, также есть и на других машинках в кластере. Собственно, это и был ответ, прозвучавший раньше вопроса, а вопрос был -- неработоспособность одной машины в кластере несущественна потому, что есть избыточность (redundancy), или потому, что на одной машинке слишком маленькая часть индекса, всё равно никто не заметит.

Второй вопрос был -- делает ли Эндрю что-нибудь именно для Гугла. Ответ -- ничего не делает, только участвует в митингах раз в два месяца. Сначала, когда только перешёл туда -- делал. Они переезжали с ядра 2.6.10 (кажется) на 2.6.18, поэтому надо было посмотреть все патчи, которые у них были для 2.6.10, и выкинуть уже ненужные.

А вот фотки, кому интересно

nepal

cvs to git

С конца 2000 года и практически по сей день я использую CVS -- то эпизодически, то очень часто и много. И всё это время мне она не нравится.

Где-то последние года полтора я периодически использую GIT. И всё время он мне нравится, причём чем дальше, тем больше.

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

Делается это буквально на раз-два. Вот пример для удалённого репозитория:

mkdir project
cd project
git-cvsimport -p x -v -d :ext:login@domain.com:/cvsroot project/dir


Оно, конечно, не так быстро работает, как хотелось бы -- даже для не очень развесистой истории времени на чай вам хватит. Но зато потом с этим можно работать.

PS Вот говорят, что subversion есть достойная замена CVS. А вы видели хотя бы от subversion пристойный (да что там пристойный -- понятный хотя бы) веб-интерфейс? Вот и я не видел... разве что trac? Но там он как-то хитро вместе с wiki и ещё чёрт знает чем объединён.

PPS Про сабвершн, даркс, меркуриал можете мне не писать -- я более-менее в курсе. Про монотон и базаар слышал. Про остальное практически нет.

Update 2011.11.17: comments disabled because of spam
nepal

how to get process start time

Иногда надо узнать, когда застартовал тот или иной процесс. Вот простой способ это узнать с помощью ps:

# ps -o pid,stime,cmd -C nc
  PID STIME CMD
 4782 18:10 /usr/bin/nc -u -l -p 6666


Аргумент опции -С говорит, процесс с каким именем мы хотим увидеть. Аргументы опции -o говорят, что мы хотим увидеть об этом процессе (PID, время старта и саму команду). Правда, если оно стартовало вчера, вам покажут только дату. Update: как подсказывают в комментах, чтобы увидеть полную дату, можно использовать параметр lstart:

# ps -o pid,lstart,cmd -C init      
  PID                  STARTED CMD
    1 Fri Apr 25 06:34:50 2008 init [3]
nepal

howto fix mediawiki png uploads

Сегодня я имел MediaWiki. Точнее, напротив -- это она имела меня. Хочу загрузить в wiki файлик plot.png, вполне себе такой валидный файлик -- ан нет, пишет, что "The file is corrupt or has an incorrect extension. Please check the file and upload again".

Методом последовательных приближений было выяснено, что виновата функция MediaWiki MimeMagic::guessMimeType(), точнее, функция PHP mime_content_type(), а если совсем точно, то файл /etc/httpd/conf/magic, предоставляемый вовсе даже не PHP, а Apache.

Так вот, в этом файлике нет никаких упоминаний про PNG, ввиду чего тип нашего файла определяется как text/plain, что порождает внутри кода MediaWiki классовое противоречие, ибо MIME-тип text/plain никак не конгруэнтен расширению PNG. Противоречие сиё она разрешает очень просто -- загрузить файлик не даёт, ругается (см. выше).

Решение очень просто -- выцарапать строчку про png из /usr/share/magic.mime (файл любезно предоставлен утилитой file, точнее, пакетом file-libs) и вписать её в вышеупомянутый /etc/httpd/conf/magic:

echo "0 string \x89PNG image/png" >> /etc/httpd/conf/magic

Для проверки:
echo '<? echo mime_content_type("/path/to/your/plot.png"); ?>' | php
image/png


Update: ваша mediawiki, вероятно, крутится под mod_php в Апаче. Чтобы изменения в magic подхватились, Апача надобно перестартовать.
nepal

Linksys WRT-54GL как домашний роутер

Сегодня ночью не спалось (привет, Лос-Анджелес!), поэтому я решил разобраться с роутером Linksys WRT-54GL, который по случаю недавно закупил.

Разобраться я с ним решил в том смысле, чтобы переехать на него в качестве домашнего роутера. До сего дня у меня роутером работал старый десктоп от Compaq, имеющий 4-port Ethernet карточку и Wi-Fi от Atheros. Там стояла Gentoo, и всё работало себе и работало. Девайс выжил несколько переездов с квартиры на квартиру, несколько смен провайдеров и т.п. Соответственно, всё меня в нём устраивало, пока там не накрылся винт. Кстати, 10 лет проработал ровно.

Gentoo снова ставить долго, особенно на таком старинном железе, поэтому я решил туда что-то специализированное воткнуть, желательно мини-дистр, заточенный под роутер. Опробовал разнообразных с десяток, более всего мне понравился pfSense (он FreeBSD-based). Увы, ни один из них не подошёл, так как наш мега-провайдер МФТИ-телеком требует просто-таки чудовищный сетевой сетап: Ethernet, DHCP, десяток статических маршрутов (правда, они их выдают по DHCP, но половина dhcp-клиентов их не понимают), потом поверх этого PPTP в интересной конфигурации. Соответственно, и pptp, и LAN надо потом NATить.

Разочаровавшись в специализированных дистрибутивах, я поставил на роутер CentOS 5 (надёжность, знакомость) -- тоже долго мучился [1], [2], [3]), всё заработало, но, в общем, тоже счастья не настало. Конфигурация сети там какая-то убогая, нельзя сказать, что оно "заработало из коробки".

А теперь вот решил не выпендриваться и поставить LinkSys. Что бы вы думали? Он тоже не умеет PPTP "поверх". Точнее, умеет, но не "поверх". Ну и я туда влил DD-WRT. Он умеет. Но тоже как-то не совсем так. Чтобы всё получилось, пришлось редактировать файл /tmp/pptp_client/options.vpn -- убрать отттуда с десяток опций. Пока ещё не знаю, какая опция "виновата". Проблема в том, что там дебага никакого ни pptp, ни pppd не выводят, видимо, откромсали там всё это. Вторая проблема в том, что /tmp в ramfs, а остальная файловая система read-only, параметры все хранятся в nvram, оттуда их при старте черпают и нужные файлики создают. Таким образом, если в веб-морде нету таких настроек, то никак их не сделать persistent. Разве что образ dd-wrt пересобрать. Update: как я и предполагал, там есть кастомные команды, которыми можно всё поредактировать.

Буду думать, что делать дальше. Может, багу к ним зафайлю.