2016-02-24

история одного обновления

Я очень давно ненавижу тот путь, по которому движется разработка софта, в частности KDE (plasma).

И сегодня я вам расскажу одну из слезливых историй "почему".

После очередного незаметного обновления в очередной раз "поломался" sddm и kscreensaver:
после lock screen при попытке unlock мой пароль не принимается, а после 4х попыток ввода пароля получаю сообщение:


The screen locker is broken and unlocking is not possible anymore.
In order to unlock switch to a virtual terminal (e.g. Ctrl+Alt+F2),
log in and execute the command:
loginctl unlock-sessions
Afterwards switch back to the running session (Ctrl+Alt+F%1).



Гугл нашел эту "фичу" - у кого-то при краше greeter (окна входа) система делает crash loop, и это "пофиксили".

Еще гугл находит что проблема связана (!!!) с OpenGL, с драйверами NVidia и Intel Haswell ucode.

Естественно это все не мой случай :) - быстрое применение всех фиксов проблему не решает.
Значит надо копать.


Расскажу кратко КАК я ИСКАЛ причину, может алгоритм кому-то еще пригодится.

1. Найти точную причину и ключевые слова для гугла поможет backtrace.
Теперь, в эру systemd это Б***Ь непросто!
В логах этот сраный systemd даже не пишет что именно покрашилось:


Feb 24 17:47:40 archy systemd[1]: Started Process Core Dump (PID 3840/UID 0).
Feb 24 17:47:40 archy kdeinit5[1489]: QDBusAbstractAdaptor: Cannot relay signal KDEDModule::moduleDeleted(KDEDModule*): Pointers are not supported: KDEDModule*
Feb 24 17:47:40 archy systemd-coredump[3842]: Coredump file descriptor missing.
Feb 24 17:47:40 archy kdeinit5[1489]: The X11 connection broke: I/O error (code 1)
Feb 24 17:47:40 archy drkonqi[3836]: The X11 connection broke: I/O error (code 1)
Feb 24 17:47:40 archy systemd[1]: Started Process Core Dump (PID 3847/UID 0).
Feb 24 17:47:40 archy systemd-coredump[3848]: Coredump file descriptor missing.

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

но ладно, найдем корки:


#ls -la /var/lib/systemd/coredump 
-rw-r-----+ 1 root root 3427883 Feb 24 13:42 core.drkonqi.1000.a053e839a290482a902aea45b03ad468.1348.1456314160000000000000.lz4
-rw-r-----+ 1 root root 3678241 Feb 24 12:52 core.drkonqi.1000.ca67dc2d7ad64c77996b6e6d43ec7f45.3502.1456311160000000000000.lz4

-rw-r-----+ 1 root root 4229665 Feb 24 14:56 core.klipper.1000.a053e839a290482a902aea45b03ad468.2159.1456318565000000000000.lz4
-rw-r-----+ 1 root root 3313889 Feb 24 17:45 core.klipper.1000.a053e839a290482a902aea45b03ad468.2181.1456328750000000000000.lz4
-rw-r-----+ 1 root root 4757578 Feb 24 13:58 core.systemsettings5.1000.a053e839a290482a902aea45b03ad468.1754.1456315120000000000000.lz4


drkonqi - это графическая уведомлялка "ой, что-то покрашилось. отправить отчет ган^Wразработчикам?"
klipper - удобный менеджер буфера обмена. к входу в систему точно отношения не имеет.
systemsettings - утилита настройки обоев рабочего стола.
Странно что нет ни sddm, ни kscreensaver - но надо посмотреть на то что есть.

2. анализ дампа
* распаковываем core: unlz4  
* ищем исходный бинарник: file


govno: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from '/usr/lib/drkonqi --appname drkonqi --apppath /usr/lib --signal 8 --pid 3500 --s'


 * открываем отладчик:


# gdb /usr/lib/drkonqi
/var/lib/systemd/coredump/
core.drkonqi.1000.a053e839a290482a902aea45b03ad468.1348.1456314160000000000000

...
Reading symbols from /usr/lib/drkonqi...(no debugging symbols found)...done.
[New LWP 3502]

warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Core was generated by `/usr/lib/drkonqi --appname drkonqi --apppath /usr/lib --signal 8 --pid 3500 --s'.
Program terminated with signal SIGFPE, Arithmetic exception.
#0  0x00007f75971772a8 in raise () from /usr/lib/libc.so.6
 


тут видим что креш по SIGFPE , а у всех нагугленых проблем SIGSEGV, т.е. источник проблемы другой чем у "умных" форумчан которые трейс показывали.
Но может совпасть с проблемой "тупых" форумчан, который кроме "ой, все, ниче не работает" ничего о своей проблеме не написали.

* смотрим бектрейс: bt


(gdb) bt
#0  0x00007f75971772a8 in raise () from /usr/lib/libc.so.6
#1  0x00007f7599f16e97 in KCrash::defaultCrashHandler(int) () from /usr/lib/libKF5Crash.so.5
#2 
#3  0x00007f75958b4c19 in pthread_barrier_destroy () from /usr/lib/libpthread.so.0
#4  0x00007f757d4a796f in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#5  0x00007f757d4b3441 in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#6  0x00007f757d15254f in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#7  0x00007f757d1525f5 in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#8  0x00007f757d150a2f in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#9  0x00007f75945d9522 in ?? () from /usr/lib/libGL.so.1
#10 0x00007f75945b5506 in ?? () from /usr/lib/libGL.so.1
#11 0x00007f75945b5589 in ?? () from /usr/lib/libGL.so.1
#12 0x00007f75945b56de in ?? () from /usr/lib/libGL.so.1
#13 0x00007f7595fefc52 in XCloseDisplay () from /usr/lib/libX11.so.6
#14 0x00007f758caf20a6 in QXcbConnection::~QXcbConnection() () from /usr/lib/libQt5XcbQpa.so.5
#15 0x00007f758caf2409 in QXcbConnection::~QXcbConnection() () from /usr/lib/libQt5XcbQpa.so.5
#16 0x00007f758caf3ea6 in QXcbIntegration::~QXcbIntegration() () from /usr/lib/libQt5XcbQpa.so.5
#17 0x00007f758caf3fb9 in QXcbIntegration::~QXcbIntegration() () from /usr/lib/libQt5XcbQpa.so.5
#18 0x00007f7597e24d43 in QGuiApplicationPrivate::~QGuiApplicationPrivate() () from /usr/lib/libQt5Gui.so.5
#19 0x00007f75983dba09 in QApplicationPrivate::~QApplicationPrivate() () from /usr/lib/libQt5Widgets.so.5
#20 0x00007f7597b24618 in QObject::~QObject() () from /usr/lib/libQt5Core.so.5
#21 0x00007f75983dd7f9 in QApplication::~QApplication() () from /usr/lib/libQt5Widgets.so.5
#22 0x0000000000433f5d in main ()

Рассмотрим основные:
* все креши идут из-за рендеринга libX11 и libGL (т.е. проблема может быть и в дровах видео,
* но есть swrast_dri.so - т.е. сейчас нет аппаратной акселерации и потому nvidia и intel не при чем.


3. проверяем по логам обновлений какие пакеты обновлялись, и тут сюрприз - обновился именно libc:
 upgraded binutils (2.25.1-3 -> 2.26-1)
 upgraded gcc-libs (5.3.0-4 -> 5.3.0-5)
 upgraded gcc (5.3.0-4 -> 5.3.0-5)
 upgraded lib32-glibc (2.22-4 -> 2.23-1)
 upgraded lib32-gcc-libs (5.3.0-4 -> 5.3.0-5)
 upgraded lib32-sqlite (3.10.1-1 -> 3.11.0-1)
 upgraded lib32-systemd (228-1 -> 229-1)
 upgraded libfbclient (2.5.4.26856-3 -> 2.5.5.26952-1)
 upgraded xorg-xrandr (1.4.3-1 -> 1.5.0-1)
так как ни libGL, ни библиотеки X11, ни DRI последние несколько месяцев не обновлялись - можем пока их исключить.
даунгрейдим libc до предыдущей версии, той где все еще присутствует критическая уязвимость CVE-2015-7547 :-D

делаем ребут (libc увы используется почти всей системой, потому для эфекта нужно перезапустить буквально все) - и все работает.

4. Для профилактики CVE-2015-7547 перепроверяем что у нас весь dns идет через закрытый dns forwarder(ключевое слово dnsmasq).

4. Благодарим гребаных "програмистов" за "хорошую" работу.

2014-04-30

вышла новая уебанта, продолжение: немного о радостях жизни...

Продолжая рассказ о прелестях современного говнософтостроения.

за несколько дней пользования к всем проблемам старой уебанты (а ни одна из них не исчезла), добавились новые:

1. автоматически отключается запуск скринсейвера по бездействию пользователя.
т.е. при каждом перезапуске системы нужно идти в настройки скринсейвера и вручную включать запуск по 5мин бездействия.

2. при запуске скринсейвера X залипает.
# dmesg:
 kernel: detected fb_set_par error, error code: -22
При этом процесс kded4 уходит в uninterruptible sleep, если его кильнуть, система возвращается к жизни.

3. всплывающие меню kmix (возможно и других аплетов) появляются всегда на левом мониторе. если primary при этом правый монитор, то после клика на иконку в трее, до меню нужно елозить мышкой через весь full-hd экран.

4. где-то в системных скриптах какая-то куйня, в системе постепенно нарастает кучка зомби-шеллов:
  574 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 1 [sh]
  604 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 1 [sh]
  628 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 0 [sh]
  703 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 0 [sh]

5. еще на правах анекдота. угадайте, какой процесс самый прожорливый? думаете файрфокс с 283 вкладками?
# ps -eo pid,rss,ucmd | awk '{ rss[$3]+=$2; count[$3]++ } END { for(i in rss){ print i,"(",count[i],")",rss[i] } }' | column -t | sort -rnk5 | head -n 10
krunner          (  1   )  2021956
firefox          (  1   )  1108360
okular           (  10  )  588012
Xorg             (  1   )  217296
dropbox          (  1   )  130212
plasma-desktop   (  1   )  120832
plugin-containe  (  2   )  104972
python           (  2   )  102428
ktorrent         (  1   )  87616
psi-plus         (  1   )  76680
т.е. 1 файрфокс (283 вкладки) - 1.1Гб резидентной памяти, 10шт мега-прожорливого окуляра - 0.6Гб, а ланчер krunner - 2Гб резидентной памяти в одно хлебало!

и общие впечатления.

7. намного больше утечек памяти. я думал 16Гб оперативы в ноуте избавят меня от забот о памяти. но блин, когда вдруг замечаешь что выюзано не просто все 16Гб оперативы, а еще и 6Гб свопа впридачу, это блин немного наприятно!

8. swapoff -a работает годами.
зачем он мне нужен? подчистив проблемы пункта 7 - хочется освободить своп, не перетруждать ssd на котором своп, и узнать кто столько выжирает - приложения в свопе не считаются в rss (см. скрипт из жалобы номер 6).
так вот, вычистить 3Гб из свопа, при 10Гб свободной оперативы занимает около 4 часов. и это с ssd в оперативу. КАК?

9. драйвер xhci это инфернальный звиздец.
за неделю 3 тотальных зависания системы с OOPS в этом драйвере.
так как зависло в логах OOPS не зафиксирован, жалею что не сфоткал на экране.

10. драйвер xhci это инфернальный звиздец.
если усыпить систему с чем-то подключенным к usb - при пробуждении пишет "not enough bandwidth" и usb не работает.

2014-04-21

kubuntu 14.04 released!

Свершился очередной праздник-торжество инноваций - вышел новый релиз Kуебанты 14.04!

Жизнь пользователя с каждым релизом становится все уебантей и уебантей!

Глядя на релиз-ноутс сразу понятно - проблем и недостатков в системе нет, и уже давно работа идет только над созданием принципиально новых и инновационных нанофич:
  • новый kde 4.13 (примерно такой же как в предыдущей куебанте, но естественно намного лучше!),
  • новая уникальная мозилла 28, пусть вас не обманывает номер версии 28, это вовсе не та мозилла что стоит на всех компах уже пол-года, это совершенно новая уебантная мозилла!
  • новый Muon Discover, для того что бы можно было получать в два раза больше оргазмов от установки пакетов, ведь все знают что настоящие уебантоиды целыми днями ставят и переставляют пакеты!
  • новый менеджер драйверов, нужно же чем-то себя занять когда надоело ставить пакеты через новый Muon,
  • установщик плагинов для Gwenview (и таки да, оказывается для гвенвью бывают плагины - http://extragear.kde.org/apps/kipi/ и может даже через пару-тройку десят лет появяться полезные),
  • управлялка тачпадом (осталось только что б эта срань определяла тачпад как тачпад, а не PS/2 мышку, иначе управлять в принципе нечем),
  • kde telepathy 0.8 (обязательно надо попробовать, может за 6 лет эта штука доросла до хоть чего-то?),
  • новая конфигурация локализации,
  • новый мега-супер-ахрененный генератор оргаз нетворк-менеджер,
  • новый sdk,
  • новая апликуха для создания загрузочных установочных дисков уебанты на usb-флешках, что бы было проще заражать уебантой других пользователей,
  • KDE Connect для интеграции эм... в общем что-то для переключения треков в плеере андроида с компа, если я правильно понял,
  • автоматический креш ропорт, абсолютно идентичный оному в всех дистрибутивах с kde4 за последние 6 лет, но понятное дело намного лучше, и вы сможете им наслаждаться намного чаще!
  • новый, инновационный и революционный клиент IRC - Quassel 0.10! теперь потребляет еще меньше сетевого трафика! новая версия 0.10 как бы намекает что это вовсе не beta-quality software,
  • новые уникальные уведомления в трее, которые будут сообщать о том что можно по-устанавливать новые пакеты и драйвера, и вы теперь не упустите возможность насладится новыми установщиками пакетов и драйверов!
  • и сразу же сообщение что мега-установщик muon при обновлении скорее всего не сможет обновить систему - software updater can close unexpectedly in very specific complicated update scenarios (Bug #1295437 and #1295440.

Согласитесь, список фундаментальный, в корне меняющий смысл жизни пользователя, и грех не испытать на себе все эти инновации!

Подождав неделю с момента релиза (обычно первую неделю после релиза обновление не возможно выполнить по причине избытка багов), пробую:
W: Failed to fetch gzip:/var/lib/apt/lists/partial/ua.archive.ubuntu.com_ubuntu_dists_trusty_main_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch gzip:/var/lib/apt/lists/partial/ua.archive.ubuntu.com_ubuntu_dists_trusty_universe_binary-i386_Packages  Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead.

удивительно, списки пакетов на украинском зеркале битые. даже подождать неделю после релиза, дав возможность исправить очевидные бока не помогло :(
ну ничего, меняем вручную ua на us и  пробуем - списки пакетов целы.

первая радость - инсталяционные скрипты пакета yardradius(когда-то ставил как максимально простой aaa сервер), уже не работавшие при обновлении 12.10 до 13.04, и все еще не работавшие при обновлении 13.04 до 13.10, в новой уебанте по-прежнему не работают! стабильность достойная похвалы!
достаем текстовый редактор, и правим init скрипты...

вторая радость - проблема несовместимости зависимостей openjdk. сносим, обновляем дальше. ставим взад.

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

четвертая радость - в системе теперь ЧЕТЫРЕ СИСТЕМЫ СТАРТОВЫХ СКРИПТОВ.
да-да, вы не ослышались! их теперь четыре:
1. скрипты старого доброго sysvinit в /etc/init.d и /etc/rc?.d,
2. новый охуенны upstart с конфигами в /etc/init,
3. какой-то сраный странный runit, непонятно откуда он вообще взялся,
4. и нано-инновационный systemd c конфигами в /etc/systemd

и если раньше любой демон можно было запустить/остановить с помощью /etc/init.d/XXX start|stop, или командами start|stop то теперь это не работает.
например vsftpd:
# /etc/init.d/vsftpd start
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service vsftpd start

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start vsftpd
и если раньше при этом vsftpd стартовал - теперь болт!
# pidof vsftpd
#
зато работает start:
# start vsftpd
vsftpd start/running, process 20431
# pidof vsftpd
20431
#
но если вы думаете что теперь start работает для всех сервисов, то вы ошибаетесь! для 80% всех сервисов start дает ничего:
# start ntp
start: Unknown job: ntp

пока не знаю, насколько ситуация стала хуже вследствии появления systemd, но все и так хреново.

пятая радость - система по-прежнему заботливо снабжает меня локалями и языками народов африки, юго-восточной азии и океании:
# cat /var/lib/locales/supported.d/en
en_HK.UTF-8 UTF-8
en_DK.UTF-8 UTF-8
en_IN UTF-8
en_ZM UTF-8
en_ZW.UTF-8 UTF-8
en_NZ.UTF-8 UTF-8
en_PH.UTF-8 UTF-8
en_NG UTF-8
en_US.UTF-8 UTF-8
en_GB.UTF-8 UTF-8
en_AU.UTF-8 UTF-8
en_SG.UTF-8 UTF-8
en_BW.UTF-8 UTF-8
en_AG UTF-8
en_ZA.UTF-8 UTF-8
en_CA.UTF-8 UTF-8
en_IE.UTF-8 UTF-8
и более того, эти локали автоматом генерятся наново каждые 10 пакетов инсталляции. заботливо удаляем.

шестая радость - верный традициям apt/dpkg каждый раз стоит отойти от компа начинает спрашивать какую-то херню, типа "я очень умный, я вижу ты настраивал пакет Х, давай я похерю этот конфиг [Y/N/D/A/V/C]?" и замирает пока не вернешься, и не пошлешь его нахрен. благодаря этому обновление занимает много часов.

седьмая радость - джекпот!!! - после обновления в систему невозможно зайти ни через kdm, ни через lightdm - после ввода пароля после секундного раздумия система возвращает обратно к окошку входа. а все почему? да потому что при обновлении пакет kde-workspace снесло как ненужный, и в системе осталось НОЛЬ профилей сессий для login-manager. заходим через консоль и доставляем: apt-get install kde-standard

в общем и целом, за три часа удалось и обновить систему, и более-менее вернуть все в первозданный вид.

что можно сказать о иновациях из релиз ноутс?
  • новый kde 4.13 - ноль отличий от того 4.11/4.13 что был в 13.10.
  • мозилла 28 - ноль отличий от той мозиллы 28 что была в 13.10.
  • Muon не установился, как оказалось я его еще несколько версий назад удалил. и слава богу.
  • менеджер драйверов - у меня уже сто лет как все драйвера либо есть в ядре, либо одно из двух. а те драйвера atl и хитрый вайфай с которыми у меня были проблемы - все равно придется ставить по-старинке, потому что эта срань их не умеет.
  • установщик плагинов для Gwenview - спецом полез смотреть - спросило пароль, пять минут тупило, скачало список плагинов. но ничего интересного для себя в плагинах не нашел.
  • управлялка тачпадом - система опять определила тачпад  как PS/2 мышку. бесполезно.
  • kde telepathy 0.8 - удивлен, но оно сумело законектится в googletalk (в 13.10 конектилось в 1 случае из 3), и даже сумело отправить и получить сообщение. но выглядит как говно. и назойливо сыпет все сообщения в system notification. в топку.
  • новая конфигурация локализации - ноль отличий.
  • нетворк-менеджер - сто лет в биореакторе, без шансов на реабилитацию.
  • sdk - бесполезно.
  • апликуха для создания загрузочных установочных дисков - не нашел.
  • KDE Connect - какой-то пердимонокль. из настроек только кнопка ok. элементов управления и того меньше. как работает - хз.
  • автоматический креш ропорт - ноль отличий (и таки да - я уже успел с ним встретиться :))
  • клиент IRC - устанавливать не стал, ведь нужно придумать ЗАЧЕМ? :)
  • новые уникальные уведомления в трее - сразу почувствовал. посыпало кучу говна, пока не нашел как отключить.

что уже/по-прежнему не работает:
1. индикатор раскладки.
эти сраные уебаны его поломали еще при штатном обновлении кде в 13.10. индикатор при запуске кде не появляется. нужно в каждой сессии идти в настройки и его вручную включать взад.
2. window special settin/gs.
эти сраные уебаны его поломали еще при штатном обновлении кде в 13.10. настройки перестают применятся при большинстве событий системы (например suspend/resume). что бы они заработали, нужно каждый раз при входе/resume зайти в настройки и нажать "применить".
3. восстановление сессии.
теперь firefox (а может и другие программы) теперь не запускается при восстанавлении сессии. нужно запускать вручную.
4. опять кодеки mp3 не работают.
теперь новый инновационный подход - ставить стотысяч одинаковых кодеков, каждому плееру - свой!
уже были установлены:
gstreamer0.10-plugins-ugly
libk3b6-extracodecs
chromium-codecs-ffmpeg-extra
oxideqt-codecs-extra
libk3b6-extracodecs
kubuntu-restricted-extras
и еще пришлось ставить
gstreamer1.0-plugins-ugly
скорее всего, по мере использования придется ставить еще.

продолжение следует.

2013-02-12

L2 туннели на убунте

я тут думал взгромоздить на уеб**нту vxlan для того что б прокинуть вланы с виртуалками через ip сеть, но нужно ядро 3.7+ и iproute2 3.7+, и если для первого есть полу-официальные пакеты, то для второго надо собирать из исходников чего совсем не хочется.

искал альтернативу, и решил сделать интересный эксперимент:
на openvpn соединении создаем влан:
 
ip link add link tap-vpn1 name tap-vpn1.11 type vlan id 11
ip link set tap-inwifi.11 up


вешаем айпишник и делаем пинг:
 
ip address add 1.1.1.1/30 dev tap-vpn1.11
ping 1.1.1.2

на другой стороне openvpn туннеля смотрим на результат:
 
# tcpdump -i tap0 -n -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 65535 bytes

13:06:04.918001 42:b9:dd:ac:ff:50 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 11, p 0, ethertype ARP, Request who-has 1.1.1.2 tell 1.1.1.1, length 28

есть заголовок 802.1q и метка влана :)
вот и решение как без огорода можно исхитрится соединить L2 домены ;)

2013-01-29

сетевику на заметку

Для того что б сделать с линухи IGMP Report на группу, можно воспользоватся... iperf!

# iperf -s -u -B 233.33.33.33

-s что б просто ждал
-u потому что по tcp проблематично ждать мультикаст
-B на какой адрес повесится

в зависимости от версии ядра будет слатся либо IGMPv2 либо IGMPv3.
если хотим конкретную версию - меняем sysctl:

# sysctl -w net.ipv4.conf.eth0.force_igmp_version=2

проверяем tcpdump:

# tcpdump -i eth0 proto 2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:33:30.866220 IP 192.168.208.78 > 233.33.33.33: igmp v2 report 233.33.33.33

меняем версию на 3:

# sysctl -w net.ipv4.conf.eth0.force_igmp_version=3
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:34:07.555048 IP 192.168.208.27 > igmp.mcast.net: igmp v3 report, 1 group

ну а если нужно просто зарегистрировать на сетевухе мультикаст мак, то поможет iproute2:
ip maddr add 233.33.33.33 dev eth0

2013-01-09

без комментариев

 

root@t00l ~ # free -m
             total       used       free     shared    buffers     cached
Mem:          7855       7733        121          0          1        125
-/+ buffers/cache:       7607        247
Swap:         7811       4058       3753

root@t00l ~ # pkill -9 firefox

root@t00l ~ # free -m
             total       used       free     shared    buffers     cached
Mem:          7855       1123       6731          0         10        345
-/+ buffers/cache:        767       7087
Swap:         7811       1851       5960

2012-11-29

как можно ограничить число устройств у абонента?

     эта проблема давно беспокоит всяких жадных провайдеров, ведь клиенты очень любят интернет использовать не просто на своем ноутбуке, но и на телефоне, на телевизоре, медиацентре, на виртуальных машинах, да и просто не привязывать себя к столу проводом а использовать вай-фай.
естественно провайдеру хочется что б клиент в этом случае платил за свои 2Мбит интернета за каждое "подключение" отдельно.

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

2. следующий шаг - использование аутентификации.
например - 802.1x или PPPoE/PPTP доступ в сеть.
решение - выполнять аутентификацию на роутере и с него же поднимать туннель.
не проблема для абонента.

3. тяжелая артиллерия - фильтрация по TTL :)
вешать на клиента список доступа, принимающие пакеты ровно с TTL=128(венда) или TTL=64(unix/linux/macos).
здесь все становится немного сложнее.
не все роутеры умеют такое бороть, но если роутер использует прошивку на линуксе (dd-wrt/openwrt/и т.д.), то там все решается предельно просто:
iptables -t mangle -A POSTROUTING -o -j TTL --ttl-set 128
большинство прошивок могут такую команду добавить а автозапуск.

4. сверх-тяжелая артелерия и приз зрительских симпатий - УСТАНОВКА TTL!
роутер провайдера на все пакеты идующие в сторону клиента ставит TTL=1.
если абонент подключил маршрутизатор, то он при пересылке пакета внутрь на проводную ил беспроводную либо даже виртуальную сеть уменшает TTL на единицу, и тут - упс, TTL=0, пакет нужно отбросить и отправить TTL exceeded!
на линуксе (dd-wrt/openwrt/и т.д.) все решается предельно просто, как и в прошлом варианте, только теперь на трафик полученный на wan интерфейсе:
iptables -t mangle -A PREROUTING -i -j TTL --ttl-set 128
большинство прошивок могут такую команду добавить а автозапуск.

если вы можете список дополнить - буду благодарен :)

2012-11-06

управление тачпадом из коммандной строки

У меня забавная проблема с отключением тачпада в убунте.
Конечно же оно не работает :)
Но на самом деле проблема не в том что кнопка отключения не работает. Она-то как раз в норме. Вот проверка xev'ом:
KeyPress event, serial 40, synthetic NO, window 0x4600001,
    root 0xd8, subw 0x0, time 26256081, (598,673), root:(601,696),
    state 0x0, keycode 199 (keysym 0x1008ffa9, XF86TouchpadToggle), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x4600001,
    root 0xd8, subw 0x0, time 26256156, (598,673), root:(601,696),
    state 0x0, keycode 199 (keysym 0x1008ffa9, XF86TouchpadToggle), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
Проблема в том что у меня оказывается нет тачпада:
#  xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                        id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Laptop_Integrated_Webcam_HD               id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=13   [slave  keyboard (3)]
Вот та хрень PS/2 Generic Mouse и есть мой тачпад :(
Модель ALPS воткнутая долбаным делом не существует, и дров на нее не бывает, как и прокрутки и малтитача.

Но вопрос по отключению, и здесь все просто: xinput enable 12 и xinput disable 12 (12 это айди из вывода xinput).

Но это не интересно, нужно написать скрипт touchpad-toggle!
#!/bin/bash
TOUCHPAD=12
if [[ $(xinput list ${TOUCHPAD} | grep "This device is") =~ disabled ]]; then
        echo "Enabling touchpad"
        xinput enable ${TOUCHPAD}
else
        echo "Disabling touchpad"
        xinput disable ${TOUCHPAD}
fi
Теперь можно было бы попробовать повесить этот скрипт на кнопку XF86TouchpadToggle но, к сожалению, КДЕ не позволяет именно на эту кнопку вешать скрипты :(

А вас раздражает когда ноут просыпается от открытия крышки?

Лично меня - да.
Я обычно предпочитаю его открыть поставить в дальний угол стола, подключить все мониторы, сетевой кабель, usb-хаб, и только потом нажать кнопку power.
Но - не судьба. Под убунтой он просыпается от открытия крышки :(

Не беда! Это можно полечить.
Разгадка этой проблемы в /proc/acpi/wakeup:
# cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
P0P1      S4    *disabled 
EHC1      S4    *enabled   pci:0000:00:1d.0
EHC2      S4    *enabled   pci:0000:00:1a.0
XHC       S4    *enabled   pci:0000:00:14.0
RP01      S4    *disabled  pci:0000:00:1c.0
PXSX      S4    *disabled  pci:0000:01:00.0
RP05      S4    *disabled  pci:0000:00:1c.4
PXSX      S4    *disabled  pci:0000:02:00.0
RP06      S4    *disabled 
PXSX      S4    *disabled 
PEG0      S4    *disabled 
LID0      S3    *enabled  
Это список устройств которые могут будить систему из разных уровней сна(S3=suspend to ram, S4=hibernate to disk), и то разрешено им это делать или нет(enabled/disabled).
Что за pci устройства можно проверить относительно просто:
# lspci -s  0000:00:1d.0
00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)
Но меня интересует последняя строка - LID0.
Отключить - просто:
echo -n LID0 > /proc/acpi/wakeup
cat  /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
P0P1      S4    *disabled 
EHC1      S4    *enabled   pci:0000:00:1d.0
EHC2      S4    *enabled   pci:0000:00:1a.0
XHC       S4    *enabled   pci:0000:00:14.0
RP01      S4    *disabled  pci:0000:00:1c.0
PXSX      S4    *disabled  pci:0000:01:00.0
RP05      S4    *disabled  pci:0000:00:1c.4
PXSX      S4    *disabled  pci:0000:02:00.0
RP06      S4    *disabled 
PXSX      S4    *disabled 
PEG0      S4    *disabled 
LID0      S3    *disabled 
 Осталось сделать это умолчанием. Можно это положить где-то в /etc/pm/sleep.d, что б оно применялось при выходе из сна(на случай если потеряется например при хибернейте), или в /etc/rc.local.

P.S. Сначала написал пост, потом нагуглил точно такой же :)
P.P.S. Осталась только одна маааленькая проблемака. Это не работает :(

И вновь про криворуких программистов

Есть еще одна милая проблема которая не дает мне спокойно жить.
Она состоит в том что мониторов у меня не два, а ТРИ.
Но. На самом деле, видеокарта одновременно может аппаратно обрабатывать ровно столько мониторов, сколько в ней есть CRTC, которых в большинстве случаев два.
Потому я использую два внешних(подключенных к VGA и HDMI), а третий - дисплей ноута отключаю.
Но. Люди Творящие Добро сделали так, что X-сервер автомагически при запуске пытается включить ВСЕ мониторы. И это заканчивается либо Тремя Черными Экранами Не Реагирующими Ни На Что, либо (если повезет), консолью с сообщением
[drm:drm_crtc_helper_set_config] *ERROR* failed to set mode on [CRTC:7]
Решение - отключить механически один из мониторов, затем с телефона зайти по ssh на ноут, и сделать /etc/init.d/?dm restart
Круто, правда? Чистый юзабилити, мать его так...

Вчера не мог себя заставить занятся делом, и потратил на траблшутинг этой херни два часа.
Идея простая: написать кусок конфига X-сервера, в котором запретить включать любые мониторы кроме встроеного (для начала хотя бы так, дальше буду думать как удобнее).

Проблема первая: Ведь теперь нет xorg.conf! где X-сервер хранит свой конфиг???
Все очень просто -
mkdir -p /etc/X11/xorg.conf.d
^mkdir^cd^
vim 10-monitor.conf
Section "Monitor"
        Identifier "LVDS1"
        Option "Primary" "true"
        Option "Enable" "true"
EndSection

Section "Monitor"
        Identifier "HDMI1"
        Option "Enable" "false"
EndSection

Section "Monitor"
        Identifier "VGA1"
        Option "Enable" "false"
EndSection
Думаете заработало? Хрен!

1) для привязки мониторам к видеовыходам нужно добавить настройку видеокарты:
Section "Device"
        Identifier "vcard"
        Driver     "intel"
        Option "Monitor-LVDS1" "LVDS1"
        Option "Monitor-VGA1" "VGA1"
        Option "Monitor-HDMI1" "HDMI1"
        Option "Monitor-DP1" "DP1"
EndSection
2) Опция Enable, несмотря на то что описана в документации, оказывается не работает! И нет, NOTABUG!!!
Ок, добавляем кроме Enable false еще и Disable true.
работает? Конечно же НЕТ!

Не смотря на то что теперь конфиг правильный (проверяем по логам иксов):
 (II) intel(0): Output LVDS1 enabled by config file
 (II) intel(0): Output VGA1 disabled by config file
 (II) intel(0): Output HDMI1 disabled by config file
Проблема на месте, и дальше в логе мы видим:
 (WW) intel(0): Option "Primary" is not used
 (WW) intel(0): Option "Enable" is not used
Т.е. интеловский драйвер просто ложит болт на опцию Enable?

3) Есть еще мега-опция "Ignore" "true"
Но если ее повесить на выход, он становится полностью недоступным, т.е. даже исчезает из xrandr.
Но это плюс, ведь xrandr мне еще светит неведомого зверя под именем DP1, повод исправить! Добавляю в 10-monitor.conf
Section "Monitor"
        Identifier "DP1"
        Option "Ignore" "true"
EndSection
Итог: проблема осталась на месте. Я ненавижу разработчиков Xorg. Я ненавижу разработчиков Intel. При включении ноута надо не забыть отключить внешние мониторы :(

Еще один камень в сторону криворуких программеров

Еще одна веселая проблема.
Проявляется во многих "кросс-платфоменных" ява-приложениях, но больнее всего меня поразила в такой штуке как NX.
Мне приходится постоянно с ним работать в удаленных лабах.
Вот так он должен выглядеть:
В конфигурации терминальной сессии для удобства вшито разрешение 1024х768, это удобно, его хватает (разрешение можно поменять на сервере лаб, и оно опять таки вшивается в настройки сессии NX).
Все бы супер, но, все работает нормально только если у меня подключен один монитор. Как только мониторов два, картинка становится такой:
Как вам такое?
Вы можете подумать что у меня два огромных 40" монитора, но фиг там! Это окошко по ширине "почти" помещается на два монитора!
И долбаный NX плюет с колокольни на то что в сессию вшито разрешение экрана(при одном мониторе эти опции работают идеально):

И внутри терминальной сессии сменить разрешение невозможно.

Решение нашел здесь
Написать библиотеку подменяющую функции Xinerama возвращающие размер дисплея и перезагрузить ее с помощью LD_PRELOAD!!!
ОФИГЕТЬ

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

Теперь воркараунд.
1) скрипт nestify, запускающий одну программу под Xephyr:
#!/bin/bash
RESOLUTION="1024x768"
while [[ $1 =~ - ]]; do
        case $1 in
                -r)
                        RESOLUTION=$2
                        shift 2
                        ;;
        esac
done
for i in `seq 30`; do
        [[ -a /tmp/.X$i-lock ]] && continue
        Xephyr -ac -screen ${RESOLUTION} -br :$i > /tmp/xephyr.$PID.out 2>&1 &
        export DISPLAY=:$i
        sleep 1
        exec $*
        exit
done
Большая часть скрипта - грязный хак перебирающий свободные десктопы что б можно было запустить одновременно несколько таких сессий.
2) скрипт-оболочка для nxclient:
#!/bin/bash
nestify -r "1024x768" /usr/NX/bin/nxclient $*

Теперь вместо порнографии со второго скриншота у меня получается такая картинка:
Есть конечно недостатки: пока не придумал как изменить заголовок окна на более информативный, но намеки нашел здесь, но патчить и пересобирать ради этого не готов :(

P.S. За моральную и техническую помощь спасибо Илье :)

2012-07-30

"Изкувство проффесианального програмирования"

была такая шутка, якобы кусок кода венды, в котором каждая вторая строка имела вид типа while(do_nothing()){ sleep(100) };

так вот, такой стиль написания кода существует.
и применяется ушлепками из canonical.

расследования надоедливой проблемы с двухминутным ожиданием подключения сети вывело на файлик /etc/init/failsafe.conf, который на половину состоит из sleep!

 

cat /etc/init/failsafe.conf | grep -v '^[ ]*(#.*)?$'                                                                                                          <1194]14:02:43 description "Failsafe Boot Delay" author "Clint Byrum " start on filesystem and net-device-up IFACE=lo stop on static-network-up or starting rc-sysinit emits failsafe-boot console output script         # Determine if plymouth is available         if [ -x /bin/plymouth ] && /bin/plymouth --ping ; then                 PLYMOUTH=/bin/plymouth         else                 PLYMOUTH=":"         fi         sleep 20         $PLYMOUTH message --text="Waiting for network configuration..." || :         sleep 40         $PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :         sleep 59         $PLYMOUTH message --text="Booting system without full network configuration..." || :         sleep 1     exec initctl emit --no-wait failsafe-boot end script post-start exec logger -t 'failsafe' -p daemon.warning "Failsafe of 120 seconds reached."


просто и не заморачиваясь. делаем несколько раз слип. и или появляется сеть, или скипаем этот скрипт.
это гениально.

2012-07-25

вопросы по network-manager

помогите кто-нибудь победить network-manager.
для меня всегда лучшим рецептом было снести его к *беням и делать все самому, но если с проводными интерфейсами мои скрипты работают на несколько порядков лучше и надежнее, то с беспроводкой все печально.

проблема 1:
при выходе из сна эта дрянь не обновляет настройки сети(dhcp), и я могу хоть весь день сидеть как дурак думая где же мой интернет.
нужно или выдернуть кабель и, подождав минуту пока он одуплит что сеть отвалилась, воткнуть обратно, либо сделать откл/вкл мышкой.

проблема 2:
для новых интерфейсов постоянно запускает без спросу dhcp, вешает APIPA адреса, и если не дай боже получит адрес - херит установленые сессии и маршруты.

проблема 3:
я хочу что б он управлял только беспроводкой и ваще не трогал проводный интерфейс. как?

2012-06-24

краткие впечатления от win8

так случилось что поставил себе эту штуку.
если в двух словах, то если вернуть старое меню пуск (а это я так понял главное отличие от win7), то неплохо. намного больше похоже на современные тренды линуховых DE чем win7
  • меню пуск (которое красивая мозайка, метро и т.д.) - отстой, самый отстойный отстой из всего что я когда-либо видел. наверное сойдет для телефона или планшета. или если у пользователя компьютер это как телефон или планшет, только большой. но у меня ноут звонить не умеет, тачскрина нет, демо-приложения мне до фени(погода, спорт, финансы, чат и т.д.) а разобраться в этом говне и как-то его использовать мне оказалось слабо. хоть я и старался, минут 30 на это убил.
  • рабочий стол как и в win7, только попасть в него чуть сложнее.
  • explorer (не интернет) мне понравился. красивые у него теперь рюшечки, менюшечки.
  • очень красивый диалог копирования. лучшее из того что я видел в win8.
  • до сих пор не починили долбаную переключалку раскладки. после переключения нужно закрыть глаза, посчитать до ста, открыть глаза, проверить в трее текущий язык и только тогда продолжать набирать текст. иначе блин с вероятностью 50%(если привык к быстрому переключениюв иксах то 100%) успеваешь нажать что-то до переключения языка, и переключение отменяется.
  • бесит менюшка "search start devices settings" всплывающая когда курсор касается краев экрана. постоянно жму вместо прокрутки, вместо крестика или свернуть/развернуть в нее. кретинизм.
  • симпатичное окошко входа в систему. почти как на андроиде.
  • нихрена нет драйверов, не ставятся приложения работы с камерой, с сканером очепятков пальцев, с тачскрином, не работают большая часть кнопок fn. хотя все и "завелось".
  • больше нет нормальной "панели управления" а то что есть я мягко говоря не осилил.
вердикт: дописываю и сношу нахер.

2012-05-05

убунта

вынужден признать, я был совершенно не прав, заявляя что победил тупость программистов.
может я и выиграл отдельную битву (смог обновить систему, смог избавится от "бонусов", и т.д.), но война явно проиграна.
полет на 12.04 напоминает купание в зыбучем говне: много времени тратится на то что хоть на один вздох выпрыгнуть и глотнуть воздуха а не той самой субстанции которой разработчики нас снабдили на 3 года (срок действия 12.04 не пол-года, а целых три!).

причины:
1) слегка не совсем работоспособная текстовая консоль.
если стартуют иксы, в консоли нафик слетают все клавиши модификаторы, особенно fn и num-lock, и залогиниться становится задачей нетривиальной.
если долго кнопки fn, numlock, scrolllock, capslock жмакать то со временем можно уловить систему, и добиться штатной работы клавиатуры. но эту процедуру нужно повторять при каждой загрузке/перезагрузке/перезапуске иксов.
почему это меня волнует? очень просто -
2) в иксах постоянно слетает видеодрайвер. идут артефакты изображения. перезапуск иксов это решает. на время. для перезапуска нужно попасть в консоль, а тут см. пункт 1. и так каждые пару часов.
замечу, что никаких хитрых приложений я просто не запускаю, композитный менеджер окон не использую. т.е. причин для такого поведения - ноль.
3) не работает вывод видео.
ведь убунта это не какая-нибудь шлака, тут все должно быть по самому понтовому разряду. декодирование видео должен делать видеоадаптер. и сам же должен его накладывать на картинку.
и то и другое работает только первые минут 30-40 после перезагрузки системы(замечу что перезапуск иксов не помогает).
4) пару раз видеодрайвер слетал с концами. т.е. только ребут. кнопкой павер или по ссш.
5) если в трее идет любая анимация(получено сообщение, идет копирование - любая) , то Xorg жрет весь проц, система превращается в кипятильник, кулеры рычат, и все тормозит.

так что посылаю еще пучек лучей поноса всем причастным к этому празднику жизни.

п.с. читаю установку kde на windows....