@world
に登録されているパッケージAの依存パッケージは,Aがアンインストールされたあと,emerge --depclean
でアンインストールすることができる.
例えばvirtual/wine
はapp-emulation/vine-vanilla
に依存している.
%equery --no-pipe --no-color g wine * Searching for wine ... * dependency graph for virtual/wine-0-r7 `-- virtual/wine-0-r7 amd64 `-- app-emulation/wine-staging-9999 (app-emulation/wine-staging) [missing keyword] [staging] `-- app-emulation/wine-vanilla-7.0-r2 (app-emulation/wine-vanilla) amd64 [abi_x86_32= abi_x86_64=] [ virtual/wine-0-r7 stats: packages (3), max depth (1) ]
wine
をアンインストールする.
%sudo emerge -cav wine Calculating dependencies... done! >>> Calculating removal order... >>> These are the packages that would be unmerged: virtual/wine selected: 0-r7 protected: none omitted: none All selected packages: =virtual/wine-0-r7 >>> 'Selected' packages are slated for removal. >>> 'Protected' and 'omitted' packages will not be removed. Would you like to unmerge these packages? [Yes/No] >>> Waiting 5 seconds before starting... >>> (Control-C to abort)... >>> Unmerging in: 5 4 3 2 1 >>> Unmerging (1 of 1) virtual/wine-0-r7... Packages installed: 1244 Packages in world: 292 Packages in system: 43 Required packages: 1244 Number removed: 1 * GNU info directory index is up-to-date.
そうすると--depclean
を用いてwine-vanilla
や他の依存パッケージをアンインストールすることができる.
%emerge --depclean --pretend|grep 'All selected packages' All selected packages: =sys-fs/udisks-2.9.4 =dev-util/cmocka-1.1.5 =sys-libs/tdb-1.4.5 =sys-libs/libunwind-1.6.2 =sys-libs/ldb-2.4.1-r1 =dev-perl/Parse-Yapp-1.210.0-r1 =sys-libs/talloc-2.3.3 =sys-libs/liburing-2.1-r1 =dev-libs/libatasmart-0.19_p5 =dev-perl/XML-SAX-Expat-0.510.0-r3 =app-emulation/wine-desktop-common-20150204-r1 =sys-auth/rtkit-0.13-r1 =dev-libs/libbytesize-2.6 =app-eselect/eselect-wine-1.2.2 =app-crypt/mit-krb5-1.19.2-r4 =sys-fs/lvm2-2.02.188-r2 =app-emulation/wine-vanilla-7.0-r2 =sys-block/thin-provisioning-tools-0.9.0-r1 =net-fs/samba-4.15.4-r3 =sys-libs/tevent-0.11.0 =dev-perl/XML-Simple-2.250.0-r1 =acct-user/rtkit-0-r1 =acct-group/rtkit-0-r1 =app-crypt/argon2-20190702-r1 =sys-block/parted-3.5 =dev-libs/libverto-0.3.1-r1 =net-libs/rpcsvc-proto-1.4.3 =dev-util/vulkan-headers-1.3.211 =sys-libs/libblockdev-2.26 =sys-fs/cryptsetup-2.4.3 =dev-libs/libaio-0.3.112 =app-emulation/wine-mono-7.0.0 =sys-apps/keyutils-1.6.3 =media-libs/vulkan-loader-1.3.211 =app-emulation/wine-gecko-2.47.2 =dev-db/lmdb-0.9.29
しかしUSEフラグの場合,そうはいかない.
例えばvirtual/fortran
をインストールする.これにはsys-devel/gcc
のfortran
のUSEフラグを有効にする必要がある.
%sudo emerge -avt fortran パスワード: These are the packages that would be merged, in reverse order: Calculating dependencies... done! [ebuild N ] virtual/fortran-0::gentoo USE="-openmp" 0 KiB [ebuild R ] sys-devel/gcc-11.3.0:11::gentoo USE="(cxx) fortran* graphite lto (multilib) nls nptl pgo (pie) (-ada) (-cet) (-custom-cflags) -d -debug -doc (-fixed-point) -go (-hardened) -jit (-libssp) -objc -objc++ -objc-gc -openmp (-pch) -sanitize -ssp -systemtap -test -valgrind -vanilla -vtv -zstd" 0 KiB Total: 2 packages (1 new, 1 reinstall), Size of downloads: 0 KiB The following USE changes are necessary to proceed: (see "package.use" in the portage(5) man page for more details) # required by virtual/fortran-0::gentoo # required by fortran (argument) >=sys-devel/gcc-11.3.0 fortran Would you like to add these changes to your config files? [Yes/No] Autounmask changes successfully written. * IMPORTANT: config file '/etc/portage/package.use/zz-autounmask' needs updating. * See the CONFIGURATION FILES and CONFIGURATION FILES UPDATE TOOLS * sections of the emerge man page to learn how to update config files. %sudo dispatch-conf --- /etc/portage/package.use/zz-autounmask 2022-06-09 09:20:10.695916117 +0900 +++ /etc/portage/package.use/._cfg0000_zz-autounmask 2022-06-09 10:59:43.591969368 +0900 @@ -5,3 +5,6 @@ # required by @selected # required by @world (argument) >=media-gfx/graphite2-1.3.14_p20210810-r1 abi_x86_32 +# required by virtual/fortran-0::gentoo +# required by fortran (argument) +>=sys-devel/gcc-11.3.0 fortran >> (1 of 1) -- /etc/portage/package.use/zz-autounmask >> q quit, h help, n next, e edit-new, z zap-new, u use-new m merge, t toggle-merge, l look-merge: %cat /etc/portage/package.use/zz-automask # required by media-libs/harfbuzz-3.4.0-r1::gentoo[graphite] # required by dev-java/openjdk-bin-11.0.15_p10::gentoo # required by virtual/jdk-11-r2::gentoo # required by dev-java/junit-4.13.2::gentoo # required by @selected # required by @world (argument) >=media-gfx/graphite2-1.3.14_p20210810-r1 abi_x86_32 # required by virtual/fortran-0::gentoo # required by fortran (argument) >=sys-devel/gcc-11.3.0 fortran
しかしアンインストールしたあとも,このUSEフラグはずっと有効のままだ.
%sudo emerge --ask --depclean fortran パスワード: Calculating dependencies... done! >>> Calculating removal order... >>> These are the packages that would be unmerged: virtual/fortran selected: 0 protected: none omitted: none All selected packages: =virtual/fortran-0 >>> 'Selected' packages are slated for removal. >>> 'Protected' and 'omitted' packages will not be removed. Would you like to unmerge these packages? [Yes/No] >>> Waiting 5 seconds before starting... >>> (Control-C to abort)... >>> Unmerging in: 5 4 3 2 1 >>> Unmerging (1 of 1) virtual/fortran-0... Packages installed: 1245 Packages in world: 292 Packages in system: 43 Required packages: 1245 Number removed: 1 * GNU info directory index is up-to-date. %sudo emerge --ask --depclean パスワード: * Always study the list of packages to be cleaned for any obvious * mistakes. Packages that are part of the world set will always * be kept. They can be manually added to this set with * `emerge --noreplace <atom>`. Packages that are listed in * package.provided (see portage(5)) will be removed by * depclean, even if they are part of the world set. * * As a safety measure, depclean will not remove any packages * unless *all* required dependencies have been resolved. As a * consequence of this, it often becomes necessary to run * `emerge --update --newuse --deep @world` prior to depclean. Calculating dependencies... done! >>> No packages selected for removal by depclean >>> To see reverse dependencies, use --verbose Packages installed: 1245 Packages in world: 291 Packages in system: 43 Required packages: 1245 Number removed: 0 %equery --no-pipe --no-color uses sys-devel/gcc|grep fortran + + fortran : Add support for fortran
例えばDockerをインストールする時,一部のLinuxカーネルの設定を有効にしなければならない.これらは手動で行う必要があり,もしDockerをアンインストールしたとしても,有効にした設定は自動では元に戻らない.もちろん行った設定を一々メモしておけばいいのかもしれないが,できれば全部,どのパッケージがどの設定を必要としているか,自分自身がどれを必要としているかをまとめて管理するようなツールが欲しい.
普段衝動書いしたり,無駄なことばっかりやっているくせに,こういうときだけは小さなことでも気になってしまうのだが,何かこういう事態に対処できるツールが欲しい.