Не так давно наткнулся на интересную фичу в новом portage-2.2. В emerge
появились две прекрасные опции: --autounmask-write
и --autounmask
. Данная функциональность позволяет не устанавливать дополнительный пакет app-portage/autounmask
и при этом легко и безопасно манипулировать размаскировкой пакетов.
–autounmask [ y | n ]
Автоматически размаскировывает зависимости устанавливаемых пакетов. Опция включена по умолчанию. Если нужно что-то поправить в конфигурационных файлах - сообщит об этом и прервет установку.
–autounmask-write [ y | n ]
Записывает изменения в конфигурационные файлы. Конечно же, учитывает опцию --ask
и CONFIG_PROTECT
. В случае, когда CONFIG_PROTECT
не отключён, напомнит запустить etc-update
, чтобы обновить конфиги в /etc/portage/
.
Рассмотрим пример установки media-sound/audacious-2.5.3
и media-plugins/audacious-plugins-2.5.3
. На момент написания статьи эти пакеты были нестабильными (~x86).
Размаскируем требуемые пакеты, запустив команду
emerge -av --autounmask-write =media-sound/audacious-2.5.3 =media-plugins/audacious-plugins-2.5.3
Получим такое сообщение:
calculate ~ # emerge -av --autounmask-write =media-sound/audacious-2.5.3 =media-plugins/audacious-plugins-2.5.3
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild U ~] dev-libs/libmowgli-0.9.50 [0.7.0] USE="-examples" 103 kB
[ebuild U ~] media-sound/audacious-2.5.3 [2.4.4] USE="nls session sse2 (-altivec) -chardet" 1,191 kB
[ebuild U ~] media-plugins/audacious-plugins-2.5.3 [2.4.4-r1] USE="aac alsa cdda cue ffmpeg
flac gnome ipv6 libnotify lirc mp3 nls scrobbler sdl sse2 vorbis wavpack -adplug (-aqua) -bs2b
-fluidsynth (-jack) -lame -libsamplerate -midi -mms -mtp -oss -pulseaudio -sid -sndfile" 3,408 kB
Total: 3 packages (3 upgrades), Size of downloads: 4,701 kB
The following keyword changes are necessary to proceed:
#required by media-plugins/audacious-plugins-2.5.3,
required by =media-plugins/audacious-plugins-2.5.3 (argument)
>=media-sound/audacious-2.5.3 ~x86
#required by media-sound/audacious-2.5.3,
required by media-plugins/audacious-plugins-2.5.3,
required by =media-plugins/audacious-plugins-2.5.3 (argument)
>=dev-libs/libmowgli-0.9.50 ~x86
#required by media-sound/audacious-2.5.3,
required by =media-sound/audacious-2.5.3 (argument)
>=media-plugins/audacious-plugins-2.5.3 ~x86
NOTE: This --autounmask behavior can be disabled by setting
EMERGE_DEFAULT_OPTS="--autounmask=n" in make.conf.
Would you like to add these changes to your config files? [Yes/No] yes
Autounmask changes successfully written. Remember to run etc-update.
Обратим внимание, что требуемый по зависимостям пакет dev-libs/libmowgli
размаскировывать нам не потребовалось, всё сделано за нас. Запускаем, как нас и просили, etc-update
:
calculate ~ # etc-update
Scanning Configuration files...
The following is the list of files which need updating, each
configuration file is followed by a list of possible replacement files.
1) /etc/portage/package.keywords/deps (1)
Please select a file to edit by entering the corresponding number.
(don't use -3, -5, -7 or -9 if you're unsure what to do)
(-1 to exit) (-3 to auto merge all remaining files)
(-5 to auto-merge AND not use 'mv -i')
(-7 to discard all updates)
(-9 to discard all updates AND not use 'rm -i'): -3
Replacing /etc/portage/package.keywords/deps with /etc/portage/package.keywords/._cfg0000_deps
mv: переписать «/etc/portage/package.keywords/deps»? y
Exiting: Nothing left to do; exiting. :)
Теперь осталось установить то, что нам надо:
emerge -av =media-sound/audacious-2.5.3 =media-plugins/audacious-plugins-2.5.3
Обращаем внимания, что на данном этапе опция --autounmask-write
не указывается, иначе emerge
снова предложит записать изменения в конфигурационные файлы.
Небольшое замечание. Если нам надо размаскировать нестабильную версию в слоте при имеющейся стабильной (в данном примере, media-sound/audacious-2.4.4 - стабилен, media-sound/audacious-2.5.3 - нет), то при использовании опции --autounmask-write
необходимо точно указать, какую версию надо размаскировать, как это было сделано в примере выше. Если же устанавливаемый пакет не имеет стабильных версий в слоте, например, на данный момент, dev-java/java-service-wrapper
, то точно указывать номер размаскировываемой версии необязательно:
calculate ~ # eix dev-java/java-service-wrapper
* dev-java/java-service-wrapper
Available versions: ~3.2.3 ~3.3.1 ~3.3.3 {doc elibc_FreeBSD source test}
Homepage: http://wrapper.tanukisoftware.org/
Description: A wrapper that makes it possible to install a Java Application as daemon.
calculate ~ # emerge -av --autounmask-write dev-java/java-service-wrapper
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ] dev-java/javatoolkit-0.3.0-r6 17 kB
[ebuild N ] dev-java/java-config-wrapper-0.16 8 kB
[ebuild N ] dev-java/java-config-2.1.11-r3 60 kB
[ebuild N ] dev-java/icedtea6-bin-1.10.2 USE="X alsa nsplugin -doc -examples -source" 36,141 kB
[ebuild N ] virtual/jdk-1.6.0 0 kB
[ebuild N ] virtual/jre-1.6.0 0 kB
[ebuild N ] dev-java/ant-core-1.8.1 USE="-doc -source" 5,740 kB
[ebuild N ] dev-java/ant-nodeps-1.8.1 0 kB
[ebuild N ~] dev-java/java-service-wrapper-3.3.3 USE="-doc -source -test" 294 kB
Total: 9 packages (9 new), Size of downloads: 42,257 kB
The following keyword changes are necessary to proceed:
#required by dev-java/java-service-wrapper (argument)
>=dev-java/java-service-wrapper-3.3.3 ~x86
NOTE: This --autounmask behavior can be disabled by setting
EMERGE_DEFAULT_OPTS="--autounmask=n" in make.conf.
Would you like to add these changes to your config files? [Yes/No]
Нетрудно заметить, что в данном случае из всех нестабильных версий автоматически выбирается версия поновее.
Важное замечание. Чтобы размаскировка работала с использованием данного метода, требуется уже иметь любой файл (даже пустой) в изменяемых подпапках /etc/portage/package.*/
. В противном случае никаких изменений не будет и операция завершится сообщением об отсутствии файла для записи.