備忘録やめた

備忘録として使用していたけどやめた.このブログに載せてあるコードのライセンスは別途記載がない限りWTFPL OR NYSLです.

追加することはかんたんでも,削除するのは難しい

@worldに登録されているパッケージAの依存パッケージは,Aがアンインストールされたあと,emerge --depcleanでアンインストールすることができる.

例えばvirtual/wineapp-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/gccfortranの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

同じようなことはLinuxカーネルの設定でも言える.

例えばDockerをインストールする時,一部のLinuxカーネルの設定を有効にしなければならない.これらは手動で行う必要があり,もしDockerをアンインストールしたとしても,有効にした設定は自動では元に戻らない.もちろん行った設定を一々メモしておけばいいのかもしれないが,できれば全部,どのパッケージがどの設定を必要としているか,自分自身がどれを必要としているかをまとめて管理するようなツールが欲しい.

普段衝動書いしたり,無駄なことばっかりやっているくせに,こういうときだけは小さなことでも気になってしまうのだが,何かこういう事態に対処できるツールが欲しい.