LoginSignup
2
2

More than 5 years have passed since last update.

ジェンツーペンギンに自由を!

Last updated at Posted at 2017-07-26

2018/01/01 追記

現在、2017.0プロファイルではUSEフラグさえ弄ればopensslを切ってlibresslのみに可能なので、以下操作は不要となります。

/etc/portage/make.conf
USE="-openssl libressl"

いつの間にか Gentoo amd64 の dev-libs/libressl からマスクが取れていた。

折角なのでフルLibreSSL化してみようと環境を作ることにした。

僕に /etc/portage を汚せというのか

まずは Project:LibreSSL を開いて必要な修正を確認する。
まず、USEフラグのstableマスク(カッコ書きになっている奴)を外す。

/etc/portage/profile/use.stable.mask
-libressl

次に、dev-libs/libressl は未だ unstable なのでパッケージ自体のkeywordマスクを外す。
例では =dev-libs/libressl-2.2* となっている(SSLv3周りで色々あったらしい)が、執筆時点では最新が 2.6.0 だし既に 2.2 系はPortage Tree上に存在しないので普通にすべて外す。

/etc/portage/package.accept_keywords
dev-libs/libressl

一応執筆時点での本家の stable リリースは2.5.5なので、これを指定してもいい。

最後に、dev-libs/openssl をマスクする。

/etc/portage/package.mask/libressl
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 なりを行って完了。お疲れ様でした。

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2