Способы лечения невнимательности

Если вдруг вы сделали так
sudo rm /etc/portage/package.keywords/using
а потом немного подумав ещё и так
sudo rm /etc/portage/package.use/using
то вам наверняка нужен отдых ;).
Спустя какое-то время приходит осознание что надо эти пару файлов как то вернуть, а ни бэкапов ни возможности восстановить файлы нет.
Частично можно решить проблему следующими командами
sudo sh -c "eix --installed-unstable --only-names >> /etc/portage/package.keywords/repair"
sudo sh -c "qlist -IU | grep -E '\(' | sed 's/(//;s/)//' >> /etc/portage/package.use/repair"
Конечно это не вернёт утраченные файлы в первозданном виде, но почти заставит пакетный менеджер работать также как и раньше ;)
з.ы.: комментарии с исправлениями и улучшениями приветствуются, пост написан в аффектном состоянии и автор не несёт ответственности за работоспособность вашей системы после выполнения вышеуказанных действий ;)

egencache

При использовании sqlite для хранения кэша portage возникают некоторые смежные проблемы, которые хорошо расписаны в man и на форумах, но поскольку многие их не читают вообще решил прояснить кое какие моменты в своём блоге.
Ссылки на вики про настройку всем известны, но приведу их для конкретизации источника информации.
http://en.gentoo-wiki.com/wiki/Portage_SQLite_Cache
http://ru.gentoo-wiki.com/wiki/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B5%D1%88%D0%B0_Portage_%D0%B2_SQLite

Почти не отличимые оригинал (чуть более новый) и перевод. Отличается лишь одное значение
OVERLAY_CACHE_METHOD=...
Указание что что-то неведомым образом там не работает :-P
Такие вики конечно повергают в шок, ну да ладно идём читать man eix или форумы о генту и выясняем что надо немного поправить конфиги и всего-то

/etc/eix-sync.conf

*
@egencache --repo=wavilen --update

естественно egencache надо вызывать для каждого оверлея в котором нет метаданных (а таких большинство), можно вызывать руками, но разумнее прописать в конфиг. Если вдруг требуется отдельно перегенерировать метаданные для всех оверлеев (бывает запинается из-за ошибок ebuild'описателей)можно просто отпарсить выбрав нужное из конфига и создать shell скрипт

sudo sh -c "cat /etc/eix-sync.conf | sed '/\*/d;s/^\@//g' > /etc/egencache.sh"

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

Конечно самом по себе использование sqlite кэша приносит малозаметный эффект, но если объединить с монтированием дерева portage, оверлеев и кэша к ним по NetworkFSv4, то поводов для настройки становится больше. Кстати на счёт кэша я возможно погорячился, но пока более правильного метода не потянул...

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

Rigelmcr

Достаточно давно срисовал ebuild, но всё не доходили руки задействовать.
sudo tcpdump -i eth0 igmp
смотрим где "хвосты"

22:05:08.517506 IP 10.222.32.1 > ALL-SYSTEMS.MCAST.NET: igmp query v2
22:05:13.031940 IP ТУТ.БЫЛ.МОЙ.АЙПИ > 239.255.255.250: igmp v2 report 239.255.255.250
рисуем конфиг (к примеру такой для машины с тремя физическими сетевыми интерфейсами)
sudo vim /etc/rigelmcr.conf

default_mode downstream
phyint eth0 upstream
        access allow dst 239.192.152.143/24
                allow src 10.0.0.0/8
                deny dst 0.0.0.0/0

phyint br0 downstream

phyint eth1 disabled
phyint eth2 disabled

;) IPTV в линуксе быть!

portage и python 2.7

Случилось так что я поменял USE флаги для python (добавил sqlite), после чего 2.6 и 3.1 ветки благополучно были пересобраны, а emerge и ebuild больше не работали, привожу лог последнего
Traceback (most recent call last):
  File "/usr/bin/ebuild", line 138, in 
    ebuild_portdir not in portage.portdb.porttrees:
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 22, in __getattribute__
    result = object.__getattribute__(self, '_get_target')()
  File "/usr/lib64/portage/pym/portage/__init__.py", line 592, in _get_target
    return _get_legacy_global(name)
  File "/usr/lib64/portage/pym/portage/_legacy_globals.py", line 14, in _get_legacy_global
    portage.portdb = portage.db[portage.root]["porttree"].dbapi
  File "/usr/lib64/portage/pym/portage/util/__init__.py", line 1304, in __getitem__
    result = lazy_item.func(*pargs, **kwargs)
  File "/usr/lib64/portage/pym/portage/dbapi/porttree.py", line 1019, in __init__
    self.dbapi = portdbapi(mysettings=settings)
  File "/usr/lib64/portage/pym/portage/dbapi/porttree.py", line 152, in __init__
    self.auxdbmodule = self.settings.load_best_module("portdbapi.auxdbmodule")
  File "/usr/lib64/portage/pym/portage/package/ebuild/config.py", line 844, in load_best_module
    mod = load_mod(best_mod)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 402, in load_mod
    mod = __import__(modname)
  File "/usr/lib64/portage/pym/portage/cache/sqlite.py", line 14, in 
    from pysqlite2 import dbapi2 as db_module
ImportError: No module named pysqlite2
А случилось так потому что я не так давно размаскировал dev-lang/python:2.7, очевидно что его надо было поставить как-то, было найдено простейшее решение - собрать его на другой машине и распаковать в корень.
На удалённой машине надо было закомментировать оптимизации под процессор и выполнить
sudo ACCEPT_KEYWORDS="~amd64" emerge -avB1 dev-lang/python:2.7
На локальной
sftp user@host:/usr/portage/packages/dev-lang/python-2.7.1.tbz2
(пример для ssh)

IPTV video player

После сравнительно долгого мучения сначала с smplayer, потом с vlc для просмотра IPTV я открыл для себя Tano ( нашёл я его тут ).
Конечно меня ожидали некоторые трудности - первая из которых никто не написал досих пор ebuild'ов для сборки оной программы. Написал, забирать напомню в моём оверлее
sudo layman -a wavilen

Вторая сложность - пришлось ручками поправить плейлист предоставляемый провайдером, чтобы tano его "скушал", благо примеры устанавливаются вместе с плеером
equery f tano | grep m3u