Планета Calculate

Облако тэгов

звуковые карты wi-fi udev news полезное работа mail swap abi_x86_32 KDE5 xsel серые листы winbind tracker ДНК cld cp1251 live-flash valve syslog QupZilla cairo-dock автологин настройка цветов принтера freerdp mpg123 форматирование текста профиль пользователя bonding book dwm NetworkManager apvlv CLDG rtorrent uptime rutorrent ati autologin ccze asus n10j press радио mailman BINHOST builder persistence icons bash CSS клавиатура kde5 cldg strategy benchmark форум Telegram lm_sensors screenshot alpha пресса feh tun slim maillist lighttpd шаблоны домашний сервер Gnome3 hdmi CSC remoteapp zswap networking flashplayer atom n270 Книги foto тема pam power KDE dhcpcd android textile bond Tor elogv многопоточная закачка asus revision tint browser ati-drivers asterisk lirc vaio games desktop ups ускорение Xorg windows MultiTail BugTracker cpu family mplayer реестр PowerTOP su ПО RT mencoder package unmasking установка net cl-builder vulnerability blog tint2 программист LXC qrencode сайт утилитки на Icon EFI ControlMaster помощь день рождение LXD рассылка man LTE фидонет pre qupzilla db Calculate E17 wiki umd persistence-mode mirrorselect aufs xfce оптимизация AMD bootchart cryptsetup pxe birthday obmenu доступ emerge radeon pf-kernel udisks ntfs-3g xen grub openbox midori кодировка CP1251 настройка цветов сканера beta keyboard systemd-udevd Calculate package sound gcc handbook ini.env grc MATE kernel pwkl cds командная строка firefox mate make.conf XZ kernek win7 acl jabber recordmydesktop windows 7 tweaks autounmask ext4 minicom двойная загрузка #calculatelinux linux tbn bug виртуализация benchmarking raid Firefox hibernate calculate2 w2k3 маршрутизатор gnome vpn support calculate-install-gui calculate utilities glx-dock CLC 4G calculate utils otter features profile Windows 7 Huawei new tools CDS dns dhcp настройка цветов фотоаппарата Calculate Linux Enlightenment сглаживание udisks-glue reader цветовой профиль icc фидо перенесено костыли распространение pdf cmc dropbox kde xfce pastebin twitter ssh шрифт authentication cls канал wget uksm LVM world мышка день программиста Midnight Commander sudo kde nano calculate-sources templates temperature pitivi calculate 2.2 portage CMC xchat ПДУ howto theme звук dvcs meta djvu cl-update-profile X linuxdcpp 1C postgresql apache fontconfig lcdfilter fonts шрифты DPI atheros9285 ratigan монитор экран разрешение sony smplayer описание tuxonice flags optimization fonts bluetooth uefi VirtualBox nm-applet weechat 11.6 backdor qr-code alsa torrent tail forum интервью Audio utilities donation сеты monitoring распространение программ systemd Office security загрузчик dhcp binhost Скоростной алгоритм сжатия LZ4 TV GSC canto браузер CL14 xxkb участие USE samba screensaver MyRuLib lto distro xbmc keyexec python3 Снобизм stage luks UTF-8 оптимизация linux lautre дизайн energy saving plan репозиторий Summer Camp 3G курсор мыши install Calculate Utilities Библиотека shorewall gnome3 GPT steam производительность gentoo vlc p2p mp3 Plasma plugn ldap screencast icon w2k8 mc lvm Compose установка Icon в Calculate nexus repo git team CLDC Atheros XFCE cldm сборка из исходников openssh pulseaudio pgo помощь проекту CLDM liveusb ppp0 tap mouse vim перемещаемые профили cl-kernel iptables mirror android kde mtp livecd Gnome cpp livedvd установка linux e4rat calculate3 начало update caffeine binary code dns calculate linux antivirus free documentation calculate-install dmidecode kde и многопоточный звук codelite euse CLSK rip grub2 интернет unclutter freshplayerplugin hdd most openrc container release Либрусек acoola новости SSD bsa font iphone dconf btrfs E17 nut настройка цветов монитора план RSS безопасность ebuild ядро gnome 2 github ncurses почта удаленная сеть qutim разработка xorg packages openldap udisks template calculate postfix ffmpeg ubuntu clementine глобальное меню загрузка CL17 CLSL EAPI 2 CLS обмен опытом E17 Calculate chromium OpenRC Timeless overlay создание подсветки синтаксиса bittorrent АТС nouveau network calculate-utils developers вакансия ParaType facebook locale Desktop eudev DNA irc оптимизация ядра CDS настройка linux atheros calculate linux obconf pptp MidnightCommander cl-console-bg cl CLDX linux CLDL internet history objecticon видео blueman firewall layout Zen CLD подсветка синтаксиса video python dmix debian localepurge google talk-plugin smart блог bash-completion кеширование proxy Icon Calculate USB Creator Calculate Linux Spamassassin брелок programming сервер Cinnamon unicode

Обзор изменений утилит Calculate 3.5.1

Добавил(а) Alexander Tratsevskiy 6 месяца назад

Сегодня утилиты Calculate получили небольшое но весьма важное обновление.

Магические зависимости

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

Суть решения заключается в следующем. Во время сборки пакетов, утилиты, для каждого собираемого пакета вызывают emerge с просчётом зависимостей, эмулируя систему с отсутствием установленных пакетов. Полученные зависимости сопоставляются с задействованными библиотеками, чтобы выявить так называемые автомагические зависимости. После этого производится исправление зависимостей в бинарном пакете. Некоторые зависимости, с которыми слинковался пакет напротив нужно удалить. Они удаляются путём пересборки пакета с отсутствующими библиотеками. Таким образом например скрывается Akonadi во время сборки digiKam.

Несмотря на то, что пакетный менеджер устанавливает все вписанные утилитами зависимости, во время чистки пакетов (--depclean) он так же успешно их и удаляет, т.к. приоритет отдаётся оригинальным ebuild файлам в портежах. К счастью нашлось одно оригинальное решение. Был добавлен сет @autodeps, который как раз и формирует этот самый список магических зависимостей. Данные он берёт из файлов autodeps (/var/db/pkg/*/*/autodeps), включаемых в бинарные пакеты утилитами.

Для примера выполните:

emerge -Op @autodeps

Сейчас список будет скорей всего пуст. Это значит, что ваши пакеты либо не содержат автомагических зависимостей, либо они были удалены, либо попросту не учтены. Теперь давайте установим пакет www-client/otter. Это браузер, в зависимостях у которого прописан движок qtwebkit, но тем не менее он слинкован (а значит, возможно, уже умеет работать) и с qtwebengine.

emerge www-client/otter

После установки браузера сет будет уже не пустой. Проверить это можно выполнив:

emerge -pO @autodeps
...
[binary   R    ] dev-qt/qtwebengine-5.7.1-r1 

Сам сет представляет собой обычный конфигурационный файл (/usr/share/portage/config/sets/calculate.conf), содержащий команду извлекающую содержимое файлов autodeps.

Оптимизация работы с бинарным репозиторием

Если про автомагические зависимости и их вред вы могли ничего не знать, то с неспешной процедурой обновления столкнулись все. Так уж получилось, что поддержка репозитория бинарных пакетов - не основная особенность пакетного менеджера. А потому работа с ним как будто "прикручена" сбоку. Посудите сами. Emerge отдельным вызовом синхронизирует портежи, после чего считает их достоверными и работает с ними. Но вот индекс репозитория пакетов (Packages) он обновляет при каждом вызове emerge. С одной стороны это правильно, т.к. можно долгое время успешно устанавливать пакеты не обновляя портежи, с другой стороны, портежи могут создавать конфликты бинарным пакетам.

Надо отдать должное, пакетный менеджер приложил максимум усилий, чтобы сократить трафик, адаприруясь к работе как http, так и ftp сервера, либо получая заголовок файла, либо скачивая первые 8 Кб для того, чтобы узнать время модификации файла и не скачивать его целиком. Исключительно на http серверах поддерживается так же работа с запакованным индексным файлом. Тем не менее, любые сбои как в работе пакетного менеджера, например при неправильно обрабатываемых разрывов соединения, которые раньше встречались с некоторыми ftp или ошибки в определении часового пояса при определении времени модификации файла Packages по заголовку http запроса, приводят к скачиванию 6 Мб файла. Если при этом возникают проблемы с интернет соединением, то и вовсе к длительным подвисаниям.

В новой версии утилит эта проблема наконец осталась в прошлом. Виновником торжества стала опция TTL, отмечающая время, в течение которого скачанный файл Packages считается достоверным. Скачивание Packages было переложено на утилиту cl-update, которая после проверки актуальности зеркала скачивает запакованный индексный файл и вписывает в него параметр TTL, пресекающий дальнейшие попытки его скачивания пакетным менеджером. После запаковки файл уменьшился до размера ~680 Кб. Решение получилось красивым и функциональным. Переложив обновление индексного файла на утилиты, мы не внося изменений в код портежей и сохраняя обратную совместимость можем добавлять любой новый функционал, что в ближайшее время и собираемся сделать.

Прочие улучшения

В утилите cl-update был реализован механизм кэширования ранее выполненного просчёта зависимостей. Суть его сводилась к тому, чтобы можно было один раз рассчитать список доступных обновлений, после чего выполнить установку пакетов (при запуске графической утилиты из трея) максимально быстро, с передачей списка и использованием опции '--nodeps'. К сожалению этот подход не оправдал себя. Периодические проверки обновлений нагружают процессор и расходуют трафик, а кэшем просчитанных зависимостей не всегда удаётся воспользоваться. В итоге часто создаётся ситуация, когда cl-update просчитывал зависимости дважды, чтобы показать их и чтобы выполнить обновление. В новой версии утилит это было исправлено, два запроса объединены в один. В ближайшее время мы планируем переработать механизм определения доступных обновлений сведя к минимуму трафик и полностью убрав нагрузку на процессор.

Ну и последнее. Свежие ночные сборки дистрибутивов внезапно сократились на ~110 пакетов. Сделано это было благодаря исключению из образов пакетов, необходимых только для сборки. При желании вы можете провести такую чистку и в своей системе, выполнив:

emerge -ac --with-bdeps=n

что приведёт к высвобождению примерно 300 Мб.


Комментарии

Comment

Добавил(а) Виктор Кустов 6 месяца назад

Оригинальное решение с автомагией. Но списочек автомагии лучше использовать не только для исправления ситуации в дистре, но и для багтепортов в gentoo.

Comment

Добавил(а) Alexander Tratsevskiy 6 месяца назад

Оригинальное решение с автомагией. Но списочек автомагии лучше использовать не только для исправления ситуации в дистре, но и для багтепортов в gentoo.

Теперь список можно видеть в режиме он-лайн, а так же наблюдать за исправлением багов, т.к. бинарные пакеты пересобираются в т.ч. при обновлении ebuild-а или eclass-а.

Спасибо!