?

Log in

No account? Create an account
Предварительные планы (продолжение):
19/02/11 Тель-Авив ⇒ Питер
xx/03/11 Питер ⇒ Тель-Авив
xx/05/11 Тель-Авив ⇒ Питер (YNDX)

Где-нибудь в промежутке еще в Омск заскочу.

Бывает. Случается такое, что skype перестаёт запускаться. И, казалось бы, skype не обновлялся, qt тоже за последний месяц не менялся и вдруг skype перестал запускаться. И выдаёт вот такую ошибку:

skype: symbol lookup error: /usr/lib/libQtDBus.so.4: undefined symbol: _ZN14QObjectPrivate15checkWindowRoleEv

Первая же мысль линуксоида понятна — нет какой-то библиотеки. Надо проверить ldd. И делается следующее:

$ ldd /usr/bin/skype | grep 'not found'

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

$ ldd -r /usr/bin/skype | c++filt
        linux-gate.so.1 =>  (0x002e1000)
        libasound.so.2 => /usr/lib/libasound.so.2 (0x00808000)
        libXv.so.1 => /usr/lib/libXv.so.1 (0x00c3b000)
        libXss.so.1 => /usr/lib/libXss.so.1 (0x00304000)
        librt.so.1 => /lib/librt.so.1 (0x0066d000)
        libQtDBus.so.4 => /usr/lib/libQtDBus.so.4 (0x00b24000)
        libQtGui.so.4 => /opt/google/earth/free/libQtGui.so.4 (0x00c41000)
        libQtNetwork.so.4 => /opt/google/earth/free/libQtNetwork.so.4 (0x00110000)
        libQtCore.so.4 => /opt/google/earth/free/libQtCore.so.4 (0x00308000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x0023c000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00676000)
        libm.so.6 => /lib/libm.so.6 (0x00256000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0027c000)
        libc.so.6 => /lib/libc.so.6 (0x008ce000)
        libdl.so.2 => /lib/libdl.so.2 (0x00298000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0x01701000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0x0029c000)
        /lib/ld-linux.so.2 (0x00798000)
        libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0x00602000)
        libz.so.1 => /lib/libz.so.1 (0x002ac000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00a2b000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0x002c3000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0x002e2000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0x002cc000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00645000)
        libuuid.so.1 => /lib/libuuid.so.1 (0x002d6000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0x002db000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x002fb000)
undefined symbol: qBadAlloc() (/usr/lib/libQtXml.so.4)
undefined symbol: QListData::detach_grow(int*, int)        (/usr/lib/libQtXml.so.4)
undefined symbol: QListData::detach(int)        (/usr/lib/libQtXml.so.4)
undefined symbol: QObjectPrivate::checkWindowRole()        (/usr/lib/libQtDBus.so.4)
undefined symbol: qBadAlloc() (/usr/lib/libQtDBus.so.4)
undefined symbol: QMetaType::registerTypedef(char const*, int)   (/usr/lib/libQtDBus.so.4)
undefined symbol: QListData::detach_grow(int*, int)        (/usr/lib/libQtDBus.so.4)
undefined symbol: QListData::detach(int)        (/usr/lib/libQtDBus.so.4)

Кто уже догадался в чём проблема — молодец. А я же лезу в google/codesearch в поисках qBadAlloc() и вижу, что по идее он должен бы быть определён в libQtCore.so.4. И тут всё становится ясно — свежеустановленная Земля Гугла (которая Google.Earth) переопределила системную libQtCore.so.4 своей версией. Системная, естественно, лежит на своём месте в /usr/lib — значит, это какая-то магия с ld.so. В данном случае магическим оказался файл /etc/ld.so.conf.d/googleearth.conf, который googleearth совершенно не нужен, т.к. запускающий скрипт устанавливает корректную переменную LD_LIBRARY_PATH.

После удаления /etc/ld.so.conf.d/googleearth.conf и skype и googleearth работают корректно. А в багтрекере убунты этот баг вообще к пакету qt4-x11 умудрились повесить. Чудаки.

Итого

В минусе:
Два шрама, крепко испорченное настроение[1], порваная велоцепь.

В плюсе:
Первые в жизни трудовой договор, post-mortem анализ взломанного сервера, увиденный подснежник, спам с темой письма «I love you», штамп в паспорте[2]. Плюс к тому два призовых места на конкурсах linux-админов[3], медалька клуба отчаянных, предложение поработать в Яндексе, байка о том, как я починил wi-fi шестигранником, несколько новых подтверждений кармы тестера и eBook nook (клёвый, увидав я не мог сказать ничего, кроме «охуеть! дайте два!»).

В планах:
Велопробег на 4000 км., разведение чёрных лебедей в (Израиле OR Англии OR Питере OR Москве OR Екатеринбурге OR где-то еще).

Фраза…
…начала года, от Мордвиновича: «у меня нормально можно только научиться ненавидеть и презирать людей, быть снобом, но ты и так это умеешь»
…середины года, из фильма: «Будь ты проклят, офисная крыса! Пусть всё, что ты делаешь, превращается в прах и говно! Мы ухелали в Одессу без тебя! Твои бывшие друзья»
…конца года: «mazel tov».

Всех с наступающим (и местами, например в Австралии, уже наступившим) Новым Годом.



[1] С другой стороны «Grumpy people think more clearly because negative moods trigger more attentive, careful thinking» © Британские Учёные
[2] Загранпаспорте.
[3] http://it-planet.ru && http://root.yandex.ru

OpenWRT @ D-Link DIR-320, pt.2

Да, если кого-то еще интересует работоспособность OpenWRT на D-Link DIR-320, про которую я писал почти год назад

Месяц назад я обновил прошивку, которую не трогал с февраля, и т.к. с mp3 и торрентами наигрался, то взял готовый imagebuilder для KAMIKAZE (bleeding edge, r23695) с ядром 2.6.34.7. Wi-Fi в режиме точки доступа теперь работает достаточно стабильно для серфинга & IP-телефонии.

Метки:

Предварительные планы:
11/11/10 Омск ⇒ Москва ⇒ Тель-Авив
18/11/10 Тель-Авив ⇒ Москва
20/11/10 Москва ⇒ Тель-Авив
xx/01/11 Тель-Авив ⇒ (?)


UPD:
xx/0102/11 Тель-Авив ⇒ (?)
Вижу странное, при подключении к серверу мне валятся чужие букмарки вот в таких станзах:

<message from="o***@jabber.ru" type="headline" to="l***@darkk.net.ru/main">
<event xmlns="http://jabber.org/protocol/pubsub#event">
<items node="storage:bookmarks">
<item id="current">
<storage xmlns="storage:bookmarks">
<conference minimize="0" autojoin="0" name="akunamatata" jid="akunamatata@conference.jabber.ru">
<nick>o***</nick>
</conference>
<conference minimize="0" autojoin="1" name="cyberindustrial" jid="cyberindustrial@conference.jabber.ru">
<nick>п***</nick>
</conference>
<conference minimize="0" autojoin="0" name="cyberindustrial" jid="cyberindustrial@conference.jabber.ru">
<nick>м***</nick>
</conference>
<conference minimize="0" autojoin="1" name="dslr" jid="dslr@conference.jabber.ru">
<nick>o***</nick>
</conference>
</storage>
</item>
</items>
</event>
<delay xmlns="urn:xmpp:delay" stamp="2010-06-23T13:31:24Z"/>
</message>


Если кто знает, почему pubsub себя так странно ведет - ткните носом в нужный XEP, а?

Reply-to: lj_comm:ru_jabber

Метки:

Спросил тут у меня Юра Поздняков: «ты знаком с какой-нибудь бесплатной онлайн таск трекинг системой?» Да, конечно, с тысячами их: bugzilla, trac, redmine, flyspray, mantis и т.д. и т.п. Поговорив еще пару минут, я выяснил, что на самом деле нужно совсем другое. Нужен инструмент, повзволяющий единственному разработчику проекта устаканить происходящее в голове, разбить задачи на подзадачи, расставить очерёдность выполнения задач — и более ничего.

10 лет назад Joel предлагал использовать Excel вместо MS Project как один из инструментов управления проектом — т.е. использовать более общий инструмент для частной задачи, вместо использования одного из специализированных решений. По словам самого Джоеля эта статья про Excel устарела минимум года три назад, но принцип, высказанный еще Кеном Томпсоном остаётся по прежнему актуальным. When in doubt, use brute force.

Я года два назад нашёл полностью меня устраивающий кроссплатформенный инструмент для этой задачи — freemind. В меру «трендовая» вещь с красивым названием «карты памяти», а по сути для меня это всего лишь удобный древовидный блокнот с внешными ссылками, открываемыми в браузере. Утилита сия заменила мне персональный багтракер и локальную wiki. Единственное существенное дополнение к freemind в моём арсенале борьбы с проблемой хранения слабоструктурированной информации за последние полтора года — google calendar, используемый для отслеживания событий, строго привязанных к дате и времени.

Осознав возможность таск трекинга без таск трекера, Юра ушёл просветлённый.

Метки:

OpenWRT @ D-Link DIR-320

7 месяцев назад я купил забавную железкуDIR-320, забавную тем, что на ней, как и на каждом первом SOHO-роутере, бегает linux и, более того, под которую несложно состряпать свою прошивку.

Увы, полгода назад ситуация с поддержкой DIR-320 ванильным ядром была довольно грустна: если хотелось сохранить работоспособного wi-fi, то требовалось ставить ядро 2.4, в котором довольно плохо поддерживался USB. Это «довольно плохо» выражалось в том, что в произвольные моменты времени подключенная через USB флэшка или винт «отваливались» и более в систему не возвращались без классического паса руками «выключить и снова включить».

В ядре 2.6 же в драйвере b43 на тот момент не было поддержки LP_PHY для чипа BCM4318, точнее, работа над ним только начиналась и реализация была помечена как BROKEN. Но и в настоящий момент поддержка железа тоже далека от идеала, на странице драйвера b43 отмечено, что режим точки доступа на чипах 4318 не поддерживается из-за больших потерь пакетов при высоких скоростях. Действительно, при попытке завести точку доступа на всех 54 мегабитах 802.11g клиент к точке даже не мог подключиться из-за потерь пакетов, но если ограничить аппетиты 11 мегабитами 802.11b, то связь хоть и достаточно паршиво, но работает — для серфинга хватает.

Другое занятное развлечение — упихать максимально возможный набор утилит в 3.5 мегабайта флэшки. У меня уместились:

  • busybox, включая wget, crond, telnetd, syslogd, dhcp-клиент и dhcp-сервер
  • dropbear — ssh-сервер для управления роутером, т.к. telnet используется только для первоначальной конфигурации
  • madplay и драйвера для usb-звуковухи, которые в сопряжении с wget дают возможность играть разнообразные mp3-потоки, включая Радио «Воруй-Убивай»
  • transmission и web-интерфейс к нему — легковесная качалка/раздавалка торрентов
  • hostapd для работы wi-fi в режиме точки доступа
  • openntpd для поддержания точного времени на маршрутизаторе — наличие точного времени очень полезно при чтении логов
  • unfsd + portmap — NFS-сервер
  • pppd с поддержкой PPPoE
  • nvram + mtd для обновления прошивки без неудобных манипуляций с начальным загрузчиком

Для более плотного утрамбовывания я выкинул httpd из busybox, заменил dnsmasq на связку из udhcpd (для DHCP-сервера) и скриптов для iptables, которые позволяют отдавать статические настройки DNS через DHCP, чем выйграл порядка 80 килобайт. Также я заменил «ядрёный» NFS-сервер на unfs3, тут выйгрыш составил более 200 кб. При сборке transmission я использовал статические версии openssl, curl и libevent, что дало еще порядка полумегабайта места. Конечно, в openwrt включён скрипт mklibs.py, оптимизирующий динамические версии библиотек, удаляя из них не используемый приложениями код, но в случае с transmission он по какой-то причине работал некорректно, приводя к segfault при запуске демона. Судя по информации, полученной скупыми отладочными утилитами, mklibs.py вырезает много лишнего из libnsl.so и librt.so. Статическая линковка же является более отработанной технологией и в случае, если библиотека используется только одним приложением, даёт даже более хорошие результаты чем использование mklibs.py, но, увы, uclibc и libm остаются не оптимизированными. Вероятно, размер прошивки можно уменьшить еще на ≈100 кб., совместив эти два метода.

Конечно, целый набор ложек дёгтя тоже имеет место. Памяти на маршрутизаторе всего 32 мегабайта и одновременный старт NFS-сервера и torrent-клиента приводят к неимоверным тормозам всего кроме самой маршрутизации, доводя LA до ≈5. Поэтому стоит написать какие-то скрипты, переключающие «режимы работы» роутера. Более того, эти скрипты вполне можно запускать с помощью ssh, web-браузера или кнопки на торце роутера. Другой неприятностью является далеко не идеальная работа wi-fi, но для нужд интернет-радио и просмотра фильма с NFS-сервера стабильности хватает. Третья — uClibc не поддерживает fallocate и, соответственно, быстрое выделение нефрагментированного участка диска на разделе с ext4, а eglibc без плясок с бубном не собирается. Других проблем я пока не обнаружил.

Если кому-то интересны мои конфиги — их можно взять по адресу http://darkk.net.ru/home/openwrt

Метки:

Подумалось мне вчера: а какие риски есть в отключении запроса PIN-кода на SIM-карте. Плюсом обычно называется то, что вор, укравший телефон, будет достаточно глуп, чтоб позвонить с него и «засветить» своё местоположение и контакты, а честный человек, найдя потерянный телефон, сможет позвонить кому-нибудь из знакомых владельца. Для последнего, кстати, зачастую не требуется SIM-карта, т.к. многие телефоны хранят записную книжку во внутренней памяти.

Но есть и как минимум один минус, который может быть достаточно существенным. Не раз уже обсуждались проекты по использованию мобильного телефона в качестве некоторого элемента системы идентификации личности. В таких случаях кража/утеря SIM-карты вполне может привести к краже личности. Кстати, одна из существующих мошеннических схем в рунете напрямую является «кражей личности» — кража ICQ-аккаунта с последующей просьбой «занять webmoney» у доброй половины контактлиста.

Глобальная авторизация по SIM-карте — проект, граничащий с абсурдом, но и сейчас у утери симки есть довольно интересные побочные эффекты. Практически у любого ОпСоСа сегодня есть так называемый интернет-помощник. У меня на столе нашлись SIM-карты МТС и билайна: сайты обоих операторов предлагают возможность сменить пароль для доступа к интернет-помощнику, не зная старого, позвонив по определённому номеру. Помимо возможности отключения/подключения услуг на этих сайтах можно узнать полное имя владельца SIM-карты, а на сайте билайна — и его домашний адрес, что могло бы сильно подставить одного моего знакомого, таскавшего симку в качестве брелока на связке ключей…

Интересно, какая информация утекает в «личных кабинетах» других операторов?…

Метки:

rss-proxy ⇒ ljfeed.py

Судя по всему, снимать бан с rss-proxy в ближайшее время никто не собирается. Но небольшая шумика произвела и положительный эффект — один из разработчиков SUP сказал мне примерно следующее: «В мире много несчастий и нестандартных интерфейсов. Один из них — XML-RPC API livejournal.com. Документация устаревшая — но всегда можно погуглить, погуглить и найти код, который и есть лучшая документация».

Так я и поступил, на выходе получил скприт ljfeed.py, который одним запросом выгребает 50 последних записей с френденты и форматирует из них Atom-поток. Скрипт лежит на github, если кто-то хочет превратить его в вебсервис — помните про User-Agent, если кто-то хочет поставить его на свой сервер — помните о политике livejournal относительно ботов.

Полагаю, страждущим может помочь kalan, предлагавший помощь в виде некоего сервера. Инициатива, как говорится, наказуема — незнакомых мне желающих к нему и направляю, у меня же на сервере в crontab пока только одна строчка такого вида:

# Every 3 hours
42 */3 * * * $HOME/ljfeed/ljfeed.py --user darkk --pass_md5 1…4 --output $HOME/public_html/….xml

Также, в сообществе changelog появились записи про OAuth — возможно, через некоторое время политика livejournal относительно внешних вебсервисов будет более определённой, а до тех пор тратить больше часа-другого на возню с френдлентой в Google Reader смысла я не вижу.

Profile

darkk
Leonid Evdokimov
Website

Syndicate

RSS Atom
Разработано LiveJournal.com
Designed by Tiffany Chow