Certbot: ImportError: 'pyOpenSSL' ๋ชจ๋“ˆ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 04์›” 17์ผ  ยท  35์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: certbot/certbot

๋‚ด ์šด์˜ ์ฒด์ œ๋Š” (๋ฒ„์ „ ํฌํ•จ):

CentOS Linux ๋ฆด๋ฆฌ์Šค 7.3.1611

(certbot-auto, OS ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž, pip ๋“ฑ) Certbot์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

OS ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž

์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์Œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

certbot ๊ฐฑ์‹ 

์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰):
ํŒŒ์ผ "/bin/certbot", 7ํ–‰,
certbot.main์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฉ”์ธ
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/certbot/main.py", 17ํ–‰,
certbot ๊ฐ€์ ธ์˜ค๊ธฐ ํด๋ผ์ด์–ธํŠธ์—์„œ
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/certbot/client.py", 10ํ–‰,
acme์—์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ acme_client๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/acme/client.py", 31ํ–‰,
requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # ์œ ํ˜•: ๋ฌด์‹œ
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", 112ํ–‰, inject_into_urllib3
_validate_dependencies_met()
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", 147ํ–‰, _validate_dependencies_met
raise ImportError("'pyOpenSSL' ๋ชจ๋“ˆ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. "
ImportError: 'pyOpenSSL' ๋ชจ๋“ˆ์— ํ•„์ˆ˜ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. v0.14 ์ด์ƒ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด ๋ณด์‹ญ์‹œ์˜ค.

Certbot์˜ ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ๋‚ด๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋Œ€์‹  ์„ฑ๊ณต์ ์œผ๋กœ ๊ฐฑ์‹ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” Certbot ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค(์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ).

๋กœ๊ทธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ /var/log/letsencrypt ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋Œ€๋กœ ๋„๋ฉ”์ธ, ์ด๋ฉ”์ผ ๋ฐ IP ์ฃผ์†Œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ ํ•ญ๋ชฉ์ด ์—†์Šต๋‹ˆ๋‹ค. pyopenssl์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ• ์‡ผ pyOpenssl

์ด๋ฆ„: pyOpenSSL
๋ฒ„์ „: 16.2.0
์š”์•ฝ: OpenSSL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฃผ๋ณ€์˜ Python ๋ž˜ํผ ๋ชจ๋“ˆ
ํ™ˆํŽ˜์ด์ง€: https://pyopenssl.readthedocs.io/
์ €์ž: ํ•˜์ด๋„ฅ ์Š๋ผ์™
์ž‘์„ฑ์ž-์ด๋ฉ”์ผ: [email protected]
๋ผ์ด์„ ์Šค: Apache ๋ผ์ด์„ ์Šค, ๋ฒ„์ „ 2.0
์œ„์น˜: /usr/lib64/python2.7/site-packages
์š”๊ตฌ ์‚ฌํ•ญ: 6๊ฐœ, ์•”ํ˜ธํ™”

๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋ฅ˜๋Š” ์—ฌ์ „ํžˆ ์ง€์†๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒ๊ฐ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์—ฌ๋Ÿฌ๋ถ„, pip ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด yum ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ํ˜ผํ•ฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ ์ ˆํ•œ ์ˆ˜์ •์—๋Š” pip ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  yum ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์—ฌ๊ธฐ์—์„œ ์„ค๋ช…ํ–ˆ๋‹ค.

certbot์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด CentOS 7์—์„œ ์ตœ์‹  pyOpenSSL์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์„ธ ๋ฒˆ์งธ ํŒจํ‚ค์ง€์— ์˜์กดํ•œ๋‹ค๊ณ  ํ•ด์„œ ๊ฒฐ๊ตญ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€๋Š” ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

๋ชจ๋“  35 ๋Œ“๊ธ€

urllib3๊ฐ€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ pyOpenSSL ๋ฒ„์ „์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ค„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
    # attribute is only present on those versions.
    from OpenSSL.crypto import X509
    x509 = X509()
    if getattr(x509, "_x509", None) is None:
        raise ImportError("'pyOpenSSL' module missing required functionality. "
                          "Try upgrading to v0.14 or newer.")

๋””๋ฒ„๊น… ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

    # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
    # attribute is only present on those versions.
    import OpenSSL.crypto
    print(OpenSSL.crypto)
    from OpenSSL.crypto import X509
    x509 = X509()
    if getattr(x509, "_x509", None) is None:
        raise ImportError("'pyOpenSSL' module missing required functionality. "
                          "Try upgrading to v0.14 or newer.")

Python์€ ํƒญ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ์‹๋ณ„์„ ์œ„ํ•ด ๊ณต๋ฐฑ์„ ์‚ฝ์ž…ํ•˜์‹ญ์‹œ์˜ค. ๋˜ํ•œ ์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๋ฃจํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

certbot ๊ฐฑ์‹ 



์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰):
ํŒŒ์ผ "/bin/certbot", 7ํ–‰,
certbot.main์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฉ”์ธ
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/certbot/main.py", 17ํ–‰,
certbot ๊ฐ€์ ธ์˜ค๊ธฐ ํด๋ผ์ด์–ธํŠธ์—์„œ
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/certbot/client.py", 10ํ–‰,
acme์—์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ acme_client๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/acme/client.py", 31ํ–‰,
requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # ์œ ํ˜•: ๋ฌด์‹œ
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", 112ํ–‰, inject_into_urllib3
_validate_dependencies_met()
ํŒŒ์ผ "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", 149ํ–‰, _validate_dependencies_met
raise ImportError("'pyOpenSSL' ๋ชจ๋“ˆ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. "
ImportError: 'pyOpenSSL' ๋ชจ๋“ˆ์— ํ•„์ˆ˜ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. v0.14 ์ด์ƒ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด ๋ณด์‹ญ์‹œ์˜ค.

/usr/lib64/python2.7/site-packages/OpenSSL/crypto.so

์ด ๊ฒฝ๋กœ๋Š” ์ด์ „ pyOpenSSL ํŒจํ‚ค์ง€์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. yum์„ ํ†ตํ•ด pyOpenSSL์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

centos7์—์„œ๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. yum install certbot ๊ฐ€ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— pyOpenSSL.x86_64 0:0.13.1-3.el7์„ ์ œ๊ฑฐํ•ด๋„ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊นจ์ง„ RPM์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

yum remove pyOpenSSL.x86_64
cd
mkdir virtualenv
cd virtualenv/
virtualenv --no-site-packages -p /usr/bin/python2.7 certbot
. ~/virtualenv/certbot/bin/activate
pip import six packaging appdirs
pip install setuptools --upgrade                                                                                                                                                                                    pip install certbot
certbot help

์ƒˆ๋กœ์šด centos ์„ค์น˜์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

rpm --query centos-release  # centos-release-7-3.1611.el7.centos.x86_64
wget ftp://ftp.muug.mb.ca/mirror/centos/7.3.1611/cloud/x86_64/openstack-mitaka/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo yum install certbot
certbot renew  # OK

๋‚˜๋Š” ์ด๊ฒƒ์ด certbot๋ณด๋‹ค CentOS ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. pyOpenSSL์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๋˜์—ˆ๋‹ค๊ณ  CentOS์— ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

pyOpenSSL 16.something์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„์—๋„ ๋ฌธ์ œ๊ฐ€ ์‹œ์Šคํ…œ์—์„œ ์ง€์†๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ CentOS 7 ์ปดํ“จํ„ฐ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์œ ์ผํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ pip install pyOpenSSL=0.13.1

์ง€๋‚œ ๋‘ ๋‹ฌ๊ฐ„, ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ์ง€๊ธˆ ๋‹ค์‹œ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‹ค์‹œ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅ:

>> sudo certbot certonly --standalone -d mydomain.com

<< Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.12.0', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 10, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 31, in <module>
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 112, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 147, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

_20170502100430

๋‹ต๋ณ€ ๋งํฌ: https://serverfault.com/questions/830284/certbot-for-letsencrypt-missing-pyopenssl-module

์ฐธ๊ณ ๋กœ ... CentOS์—์„œ pip๋ฅผ ํ†ตํ•ด pyOpenSSL์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ yum์„ ๊นจ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด๋–ค certbot ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? epel-testing์—์„œ 0.13.0์„ ์„ค์น˜ํ•˜๊ณ  ์‹œ์Šคํ…œ์— ์ „์ฒด yum ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ํ•ญ์ƒ ํ™•์ธํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ์„ ๋ณต๊ตฌํ•˜๋ ค๋ฉด yum ์žฌ์„ค์น˜ pyOpenSSL์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(rpm -qV pyOpenSSL๋กœ ์ƒํƒœ ํ™•์ธ).

ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ systemd ๊ฐฑ์‹  ํƒ€์ด๋จธ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์•ˆ์ •์ ์œผ๋กœ ํ‘ธ์‹œํ•˜์ง€ ์•Š์•˜์ง€๋งŒ certbot ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ˆ˜๋™ certbot ๊ฐฑ์‹ ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

0.14.0 ๋ฆด๋ฆฌ์Šค๋„ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ ๋ง ๊ทธ๋Œ€๋กœ AWS์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ์ž‘์„ฑ์ž๊ฐ€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ–ˆ๋Š”๋ฐ pip์šฉ ๋ฒ„์ „์„ ์–ด๋””์— ๊ณ ์ •ํ• ๊นŒ์š”?
์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ์„ค์น˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ์ด Dockerfile์— ์„ค๋ช…๋œ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/identinetics/docker-nginx/blob/master/Dockerfile#L65

์ƒˆ๋กœ ์„ค์น˜ ๋ฐ ์—…๋ฐ์ดํŠธ๋œ centOS 7.3์—์„œ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์—…๋ฐ์ดํŠธ๋œ pyOpenSSL rpm์„ ์„ค์น˜ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค(pyOpenSSL-0.14-3.fc222๋Š” ์ถฉ๋ถ„ํ•˜์ง€๋งŒ pyOpenSSL-16.2.0-1.fc25๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Œ). ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€?!

https://www.rpmfind.net/linux/rpm2html/search.php?query=pyOpenSSL

๊ฐ์‚ฌ ํ•ด์š”

@tisc0 ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ

centos7 certbot ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ AWS์—์„œ ๋ฌธ์ œ ์—†์ด ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ pyOpenSSL๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ centos7์— ์ง์ ‘ ์ด์™€ ๊ฐ™์€ fedora rpm์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ๋”์ฐํ•œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” Hogarthj๋‹˜,
์š”์ฆ˜ ์ข€ ๋ฐ”๋น ์„œ ๋””ํ…Œ์ผ์ด ๋ถ€์กฑํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค:)
๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ :

  • fedora rpm์„ ์„ค์น˜ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ certbot --help๋งŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค).
  • ํŒจํ‚ค์ง€๋กœ ์˜ค๋žœ ์‹œ๊ฐ„ ํ”Œ๋ ˆ์ดํ•˜๊ณ  ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด centos 7(๋ฐ•์Šค ํŒจํ‚ค์ง€ ์ œ์™ธ)์—์„œ ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ  ๋งˆ์นจ๋‚ด urllib3์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค(์—…๋ฐ์ดํŠธ๋œ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ์ง€ ์•Š์•˜๋‹ค ;]).
  • yum(rpm -e๊ฐ€ ์•„๋‹Œ) ๋ฐ ๋ชจ๋“  ์ข…์† ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ urllib3์„ ์ œ๊ฑฐ/์žฌ์„ค์น˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ipa-client์—๋„ ํ•„์š”ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ณตํ†ต ํŒจํ‚ค์ง€...
  • ๋‚˜๋Š” (์ˆœ์„œ๋Œ€๋กœ) urllib3 ๋ฐ certbot์„ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์นจ๋‚ด ipa-client๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ๊ณ  ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

[ root@c7-dse ~]# ์—์ฝ” N | yum ์ œ๊ฑฐ python-urllib3 | awk '{$1}'
(...)
์ข…์†์„ฑ

==============
ํŒจํ‚ค์ง€
ํ’€์ด:
ํŒŒ์ด์ฌ-urllib3
ํ’€์ด
์ธ์ฆ์„œ๋ด‡
ipa ํด๋ผ์ด์–ธํŠธ
ํŒŒ์ด์ฌ ์š”์ฒญ
python2-acme
python2-certbot
python2-ipaclient
python2-ipalib

์ผ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ์ž‘๋™ํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ์žˆ์œผ๋ฉด ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. :)

@tisc0 ์ถ”๊ฐ€ ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

ํŒจํ‚ค์ง€๋ฅผ ๊ฐ•์ œ๋กœ ์„ค์น˜/์ œ๊ฑฐํ•˜๋ฉด ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ pip ์—…๊ทธ๋ ˆ์ด๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ข…์ข… ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

src.rpm์—์„œ ํŒจํ‚ค์ง€ ์ž์ฒด๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  CentOS์šฉ Fedora ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด(์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ œ๊ฑฐ ๋ฐ ์„ค์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  yum ์žฌ์„ค์น˜๊ฐ€ ์ƒ๋ช…์˜ ์€์ธ์ด ๋  ์ˆ˜ ์žˆ์Œ) ์›๋ณธ ํŒŒ์ผ์ด ์ œ์ž๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

CentOS ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ์ž‘๋™ํ•œ๋‹ค๋Š” ์†Œ์‹์„ ๋“ค์œผ๋‹ˆ ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค. :)

@tisc0 ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ

CentOS7์˜ ๊ฒฝ์šฐ "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL"์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ €์—๊ฒŒ ๋งค๋ ฅ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!!!

๋”๋Ÿฌ์šด ํ•ดํ‚น :1st_place_medal: ;)

pip install -U ๊ฐ€ RPM์—์„œ ์„ค์น˜๋œ ํŒŒ์ด์ฌ ๋ชจ๋“ˆ์„ ๋ฎ์–ด์ผ๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ

  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 147, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

ํ•ด๊ฒฐ์ฑ…

[root<strong i="12">@kolla</strong> ~]# rpm -qf /usr/lib64/python2.7/site-packages/OpenSSL/
pyOpenSSL-0.13.1-3.el7.x86_64
[root<strong i="13">@kolla</strong> ~]# rpm -qf /usr/lib/python2.7/site-packages/urllib3
python-urllib3-1.10.2-2.el7_1.noarch

[root<strong i="14">@kolla</strong> ~]# rpm --nodeps -e python-urllib3
[root<strong i="15">@kolla</strong> ~]# rm -rf /usr/lib/python2.7/site-packages/urllib3/
[root<strong i="16">@kolla</strong> ~]# yum -y install python-urllib3

๋ฌธ์ œ

  File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 90, in <module>
    from urllib3.exceptions import DependencyWarning
ImportError: cannot import name DependencyWarning
[root<strong i="20">@kolla</strong> ~]# rpm -qf /usr/lib/python2.7/site-packages/requests
python-requests-2.6.0-1.el7_1.noarch

ํ•ด๊ฒฐ์ฑ…

[root<strong i="24">@kolla</strong> ~]# rpm --nodeps -e python-requests
[root<strong i="25">@kolla</strong> ~]# rm -rf /usr/lib/python2.7/site-packages/requests
[root<strong i="26">@kolla</strong> ~]# yum -y install python-requests   

2018๋…„ 1์›” 29์ผ ์—…๋ฐ์ดํŠธ:

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค. :)

alias certbot='docker run --rm -ti -v /etc/letsencrypt:/etc/letsencrypt -p 80:80 certbot/certbot:v0.21.1'

@cnritng ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋‹ค์Œ์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

rpm --query centos-release  # centos-release-7-3.1611.el7.centos.x86_64
wget ftp://ftp.muug.ca/mirror/centos/7/cloud/x86_64/openstack-newton/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo yum install certbot
certbot renew  # OK

@sulliwane์—์„œ . ftp://ftp.muug.ca/mirror/... ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@JellyBool ๊ฐ์‚ฌ

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ชจ๋‘ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. yum ์„ค์น˜ http://cbs.centos.org/kojifiles/packages/pyOpenSSL/16.2.0/3.el7/noarch/python2-pyOpenSSL-16.2.0-3.el7.noarch.rpm

์—ฌ๋Ÿฌ๋ถ„, pip ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด yum ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ํ˜ผํ•ฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ ์ ˆํ•œ ์ˆ˜์ •์—๋Š” pip ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  yum ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์—ฌ๊ธฐ์—์„œ ์„ค๋ช…ํ–ˆ๋‹ค.

certbot์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด CentOS 7์—์„œ ์ตœ์‹  pyOpenSSL์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์„ธ ๋ฒˆ์งธ ํŒจํ‚ค์ง€์— ์˜์กดํ•œ๋‹ค๊ณ  ํ•ด์„œ ๊ฒฐ๊ตญ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€๋Š” ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

@dvershinin ์˜ ์œ„ ๋‹จ๊ณ„๊ฐ€ ๋‚˜๋ฅผ ์œ„ํ•ด ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

@dvershinin์ด ๊ฒŒ์‹œํ•œ ๋‚ด์šฉ๋„ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ค„์„ "yum install python-urllib3"์—์„œ "yum install python-urllib3"์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

CentOS7์˜ ๊ฒฝ์šฐ "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL"์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ €์—๊ฒŒ ๋งค๋ ฅ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!!!

*nix์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ์—๋Š” ํ•ญ์ƒ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ข…์†์„ฑ์ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค.

https://github.com/certbot/certbot/issues/4514#issuecomment -375741595
๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ๋‹ค

์—ฌ๊ธฐ์— ์•„๋งˆ๋„ ์ง„์ •ํ•œ ์ด์œ ์™€ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค:
https://www.getpagespeed.com/troubleshooting/fix-importerror-pyopenssl-module-missing-required-functionity-try-upgrading-to-v0-14-or-newer

์—ฌ๋Ÿฌ๋ถ„, pip ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด yum ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ํ˜ผํ•ฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ ์ ˆํ•œ ์ˆ˜์ •์—๋Š” pip ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  yum ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์—ฌ๊ธฐ์—์„œ ์„ค๋ช…ํ–ˆ๋‹ค.

certbot์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด CentOS 7์—์„œ ์ตœ์‹  pyOpenSSL์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์„ธ ๋ฒˆ์งธ ํŒจํ‚ค์ง€์— ์˜์กดํ•œ๋‹ค๊ณ  ํ•ด์„œ ๊ฒฐ๊ตญ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€๋Š” ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ผ์ด์•ผ!

@dvershinin ์ˆ˜์ •์€ ํ˜„์žฌ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฐ€ Centos 7์—์„œ ์„ค๋ช…ํ•œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ ์ถฉ๋Œ: (urllib3 1.10.2(/usr/lib/python2.7/site-packages), Requirement.parse('urllib3>=1.20,<1.26'))

@keir-lavelle ๋‚ด ์ˆ˜์ •์€ root ์‚ฌ์šฉ์ž ์•„๋ž˜์—์„œ pip ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ฌ๊ฐํ•˜๊ฒŒ ์†์ƒ๋œ ์‹œ์Šคํ…œ์„ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต์›ํ•˜๋ ค๋Š” ์‹œ๋„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. CentOS/RHEL ์‹œ์Šคํ…œ์—์„œ๋Š” ์ ˆ๋Œ€ ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ !)

๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋ชจํ—˜์‹ฌ์„ ๋Š๋‚€๋‹ค๋ฉด ๋ชจ๋“  Python ํŒจํ‚ค์ง€( yum ๋„ Python ๊ธฐ๋ฐ˜)๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ๋งํฌ๋ฅผ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋”์šฑ ์œ„ํ—˜ํ•œ ๊ธฐ์—…์ž…๋‹ˆ๋‹ค. . (๋” ๋งŽ์ด ๊นฐ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—).

  • certbot ์ž‘๋™ํ–ˆ๋˜ ์ผ๋ถ€ ์Šค๋ƒ…์ƒท/๋ฐฑ์—…์—์„œ ์„œ๋ฒ„๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด "๋ชจ๋“  Python ํŒจํ‚ค์ง€ ์ œ๊ฑฐ/๋‹ค์‹œ ์„ค์น˜"๊ฐ€ ์œ ์ผํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ด์œ ๋กœ yum ๋ฅผ ์ž‘๋™ ์ƒํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ).

๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก  ๋‹ค์‹œ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. root ์•„๋ž˜์— pip ๋˜๋Š” python ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ฒ˜์Œ์—๋Š” ์ด๋ ‡๊ฒŒ ๊นจ์ง‘๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด - ๊ทธ๊ฒƒ์€ ๊นจ์ง€์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐ„์„ ๋‚ด์–ด ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ…Œ์ŠคํŠธ ์ค‘์ผ ๋ฟ์ด๋ฏ€๋กœ ์„œ๋ฒ„๋Š” ์ผํšŒ์šฉ์ด๋ฏ€๋กœ ๊ณ ์žฅ๋‚˜๋”๋ผ๋„ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ ์ •๋ณด์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰