2018/01/01 追記
現在、2017.0プロファイルではUSEフラグさえ弄ればopensslを切ってlibresslのみに可能なので、以下操作は不要となります。
USE="-openssl libressl"
いつの間にか Gentoo amd64 の dev-libs/libressl
からマスクが取れていた。
折角なのでフルLibreSSL化してみようと環境を作ることにした。
僕に /etc/portage を汚せというのか
まずは Project:LibreSSL を開いて必要な修正を確認する。
まず、USEフラグのstableマスク(カッコ書きになっている奴)を外す。
-libressl
次に、dev-libs/libressl
は未だ unstable なのでパッケージ自体のkeywordマスクを外す。
例では =dev-libs/libressl-2.2*
となっている(SSLv3周りで色々あったらしい)が、執筆時点では最新が 2.6.0 だし既に 2.2 系はPortage Tree上に存在しないので普通にすべて外す。
dev-libs/libressl
一応執筆時点での本家の stable リリースは2.5.5なので、これを指定してもいい。
最後に、dev-libs/openssl
をマスクする。
dev-libs/openssl
/etc/portage 以下の修正はこれで完了。
選択出来ないのが Gentoo なんて割り切りたくないから
この状態で一度うどんワールドする。
# emerge -uDNp @world
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ~] dev-libs/libressl-2.6.0 USE="asm -static-libs" ABI_X86="(64) -32 (-x32)"
[uninstall ] dev-libs/openssl-1.0.2k
[blocks b ] dev-libs/openssl:0 ("dev-libs/openssl:0" is blocking dev-libs/libressl-2.6.0)
[ebuild R ] net-misc/iputils-20151218 USE="libressl*"
[ebuild R ] net-misc/wget-1.19.1-r1 USE="libressl*"
[ebuild R ] dev-lang/python-3.4.5 USE="libressl*"
[ebuild R ] dev-lang/python-2.7.12 USE="libressl*"
[ebuild R ] net-misc/openssh-7.5_p1-r1 USE="libressl*"
...
この例だと特に問題ないようだが、一応 dev-libs/openssl
依存と dev-libs/libressl
依存を確認しておいたほうがいい。
# equery d openssl
* These packages depend on openssl:
dev-lang/python-2.7.12 (!libressl ? dev-libs/openssl:0)
dev-lang/python-3.4.5 (!libressl ? dev-libs/openssl:0)
net-misc/iputils-20151218 (!libressl ? dev-libs/openssl:0)
(!libressl ? dev-libs/openssl:0[static-libs(+)])
net-misc/openssh-7.5_p1-r1 (!libressl ? >=dev-libs/openssl-1.0.1:0[bindist=])
(!libressl ? dev-libs/openssl:0)
(!libressl ? dev-libs/openssl:0[static-libs(+)])
net-misc/wget-1.19.1-r1 (!libressl ? dev-libs/openssl:0)
(!libressl ? dev-libs/openssl:0[static-libs(+)])
...
# equery d libressl
* These packages depend on libressl:
dev-lang/python-2.7.12 (libressl ? dev-libs/libressl)
dev-lang/python-3.4.5 (libressl ? dev-libs/libressl)
net-misc/iputils-20151218 (libressl ? dev-libs/libressl)
(libressl ? dev-libs/libressl[static-libs(+)])
net-misc/openssh-7.5_p1-r1 (libressl ? dev-libs/libressl:0)
(libressl ? dev-libs/libressl:0[static-libs(+)])
net-misc/wget-1.19.1-r1 (libressl ? dev-libs/libressl)
(libressl ? dev-libs/libressl[static-libs(+)])
...
上の例だと特に問題なく対応している様子。
矛盾がある場合は Packages not converted yet などを確認して対応状況を見つつ対応するしか無い。(そもそも移行の動きが無い可能性もあるが…)
駆り立てるのは Open と Libre 、横たわるのは Wget と SSH
あとは dev-libs/openssl
を unmerge して dev-libs/libressl
を oneshot で入れればいいように見えるが、残念ながら問題がある。
net-misc/wget
が双方に依存しているため、このままだと emerge 中のファイルフェッチ中に「opensslとのリンクが壊れたwget」を叩いてしまうタイミングが生まれる。
なので、先に dev-libs/libressl
をフェッチしてしまおう。
# emerge --fetchonly libressl
Calculating dependencies... done!
!!! The following installed packages are masked:
- dev-libs/openssl-1.0.2k::gentoo (masked by: package.mask)
For more information, see the MASKED PACKAGES section in the emerge
man page or refer to the Gentoo Handbook.
>>> Fetching (1 of 1) dev-libs/libressl-2.6.0::gentoo
<snip>
* libressl-2.6.0.tar.gz SHA256 SHA512 WHIRLPOOL size ;-) ...
ちなみに、net-misc/openssh
も依存があるので念のため注意しておこう。
手をとりあって
ここまで来たら問題ないので置き換えていく。
# emerge --unmerge openssl
<snip>
* GNU info directory index is up-to-date.
!!! existing preserved libs:
>>> package: dev-libs/openssl-1.0.2k
* - /usr/lib64/libcrypto.so.1.0.0
* used by /bin/ping6 (net-misc/iputils-20151218)
* used by /usr/bin/ssh (net-misc/openssh-7.5_p1-r1)
* used by /usr/bin/ssh-add (net-misc/openssh-7.5_p1-r1)
* used by 11 other files
* - /usr/lib64/libssl.so.1.0.0
* used by /usr/bin/wget (net-misc/wget-1.19.1-r1)
* used by /usr/lib64/python2.7/lib-dynload/_ssl.so (dev-lang/python-2.7.12)
* used by /usr/lib64/python3.4/lib-dynload/_ssl.cpython-34m.so (dev-lang/python-3.4.5)
Use emerge @preserved-rebuild to rebuild packages using these libraries
と、とても怒られるが想定内なので続行。
# emerge --oneshot libressl
<snip>
>>> Installing (1 of 1) dev-libs/libressl-2.6.0::gentoo
>>> Auto-cleaning packages...
>>> No outdated packages were found on your system.
* GNU info directory index is up-to-date.
!!! existing preserved libs:
>>> package: dev-libs/openssl-1.0.2k
* - /usr/lib64/libcrypto.so.1.0.0
* used by /bin/ping6 (net-misc/iputils-20151218)
* used by /usr/bin/ssh (net-misc/openssh-7.5_p1-r1)
* used by /usr/bin/ssh-add (net-misc/openssh-7.5_p1-r1)
* used by 11 other files
* - /usr/lib64/libssl.so.1.0.0
* used by /usr/bin/wget (net-misc/wget-1.19.1-r1)
* used by /usr/lib64/python2.7/lib-dynload/_ssl.so (dev-lang/python-2.7.12)
* used by /usr/lib64/python3.4/lib-dynload/_ssl.cpython-34m.so (dev-lang/python-3.4.5)
Use emerge @preserved-rebuild to rebuild packages using these libraries
終わり次第、うどんワールド。さすがに直前に eclean-dist
とかしてないよね?まだ wget 死んでるよ?
# emerge -uDNp @world
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] net-misc/iputils-20151218 USE="libressl*"
[ebuild R ] net-misc/wget-1.19.1-r1 USE="libressl*"
[ebuild R ] dev-lang/python-3.4.5 USE="libressl*"
[ebuild R ] dev-lang/python-2.7.12 USE="libressl*"
[ebuild R ] net-misc/openssh-7.5_p1-r1 USE="libressl*"
# emerge -uDN @world
<snip>
あとは任意に emerge --depclean
なり revdep-rebuild
なりを行って完了。お疲れ様でした。