ฉันมี EC2 VM ที่ใช้ Amazon Linux รีลีส 2 (Karoo) ฉันจะรับได้certbotอย่างไร

มันมาพร้อมกับawscliเครื่องมือที่ติดตั้งซึ่งดูเหมือนจะไม่เข้ากันกับcertbotin epel:

$ sudo bash
# yum install -y epel-release
# yum-config-manager --enable epel
# yum install certbot certbot-dns-route53
# certbot certonly --dns-route53 --dns-route53-propagation-seconds 30 -d mysite.com
An unexpected error occurred:
ContextualVersionConflict: (botocore 1.13.36 (/usr/lib/python2.7/site-packages), Requirement.parse('botocore<1.6.0,>=1.5.0'), set(['boto3']))
Please see the logfile '/tmp/tmpVO1RPd/log' for more details.

มีการพูดคุยสั้น ๆ ที่นี่: https://community.letsencrypt.org/t/contextualversionconflict-botocore-1-12-92/94922และที่นี่: https://unix.stackexchange.com/questions/415874/certbot-and- awscli-require-different-versions-of-botocore/456362#456362แต่การแก้ไขเหล่านั้นไม่ได้ผลสำหรับฉัน (และฉันต้องการมี awscli ในเวลาเดียวกัน)

ดังนั้นฉันจึงพยายามติดตั้งใน Python venv ดังนั้นฉันจึงสามารถมี certbot และ awscli ได้ แต่ฉันได้รับสิ่งนี้:

$ sudo bash
# yum install pip
# pip install virtualenv
# virtualenv env
# source env/bin/activate
# pip install certbot certbot-dns-route53
# certbot certonly --dns-route53 --dns-route53-propagation-seconds 30 -d mysite.com
Traceback (most recent call last):
  File "/home/ec2-user/certbot-venv/env/bin/certbot", line 5, in <module>
    from certbot.main import main
  File "/home/ec2-user/certbot-venv/env/lib/python2.7/site-packages/certbot/main.py", line 2, in <module>
    from certbot._internal import main as internal_main
  File "/home/ec2-user/certbot-venv/env/lib/python2.7/site-packages/certbot/_internal/main.py", line 21, in <module>
    from certbot._internal import cert_manager
  File "/home/ec2-user/certbot-venv/env/lib/python2.7/site-packages/certbot/_internal/cert_manager.py", line 16, in <module>
    from certbot._internal import storage
  File "/home/ec2-user/certbot-venv/env/lib/python2.7/site-packages/certbot/_internal/storage.py", line 79, in <module>
    def add_time_interval(base_time, interval, textparser=parsedatetime.Calendar()):
  File "/home/ec2-user/certbot-venv/env/lib/python2.7/site-packages/parsedatetime/__init__.py", line 270, in __init__
    self.ptc = Constants()
  File "/home/ec2-user/certbot-venv/env/lib/python2.7/site-packages/parsedatetime/__init__.py", line 2381, in __init__
    self.locale = get_icu(self.localeID)
  File "/home/ec2-user/certbot-venv/env/lib/python2.7/site-packages/parsedatetime/pdt_locales/icu.py", line 56, in get_icu
    result['icu'] = icu = pyicu.Locale(locale)
AttributeError: 'module' object has no attribute 'Locale'

มีใครทราบวิธีแก้ไขไหมครับ? ฉันได้ลองติดตั้งบางสิ่งที่เกี่ยวข้องกับ Locale แล้ว แต่ยังไม่มีโชค

answer

ฉันเปลี่ยนไปใช้ CentOS 7 ( https://aws.amazon.com/marketplace/pp/B00O7WM7QW ) ตามคำแนะนำของ @Michael Hampton และเกือบจะใช้งานได้ทันที

ต่อไปนี้เกือบจะใช้งานได้:

$ sudo bash
# yum install -y awscli certbot certbot-dns-route53

# certbot certonly --dns-route53 --dns-route53-propagation-seconds 30 -d myapp.com
An unexpected error occurred:
DistributionNotFound: futures>=2.2.0,<4.0.0

# yum install python2-pip
# pip install futures

# certbot certonly --dns-route53 --dns-route53-propagation-seconds 30 -d myapp.com
... now works

# aws sts get-caller-identity
... also works

... อันที่จริง เวอร์ชันของ awscli in yumค่อนข้างเก่าและไม่มีคำสั่ง AWS สองสามคำสั่ง ฉันได้ติดตั้งใหม่ผ่าน pip และเป็นเวอร์ชันที่ใหม่กว่า

แต่แล้วฉันก็ได้รับhttps://github.com/certbot/certbot/issues/6328

AttributeError: 'module' object has no attribute 'pyopenssl'

Python3

สิ่งนี้ใช้ได้กับฉัน:

yum groupinstall -y "Development Tools"
yum install -y python3-devel libicu-devel
python3 -m venv /opt/certbot-venv
cd /opt/certbot-venv
source bin/activate
pip install --upgrade certbot certbot-dns-route53 pyicu-binary

จากนั้นเรียกใช้:

source /opt/certbot-venv/bin/activate
certbot renew ...

Python2

คำเตือน : นี่จะทำให้คุณได้รับ certbot เวอร์ชันเก่า

นี่อาจเป็นจุดบกพร่องใน lib ที่ขึ้นต่อกัน "parsedatetime" ฉันมีโปรแกรมแก้ไขที่https://github.com/bear/parsedatetime/issues/251ซึ่งแก้ไขปัญหานี้ให้ฉัน

ต่อไปนี้ใช้งานได้สำหรับฉัน:

yum install -y python-pip
pip install --upgrade pip
pip install virtualenv pipenv
mkdir /opt/certbot-venv && cd /opt/certbot-venv
virtualenv .
source bin/activate
pip install --upgrade certbot certbot-dns-route53 pyicu-binary

cat >parsedatetime-patch <<'END'
index e09f517..c6f277d 100644
--- a/parsedatetime/pdt_locales/icu.py
+++ b/parsedatetime/pdt_locales/icu.py
@@ -12,13 +12,7 @@ try:
 except NameError:
     pass

-try:
-    import icu as pyicu
-except ImportError:
-    try:
-        import PyICU as pyicu
-    except ImportError:
-        pyicu = None
+import PyICU as pyicu


 def icu_object(mapping):
END
( cd lib/python2.7/site-packages ; git apply ../../../parsedatetime-patch )

(ฉันสงสัยว่าการปรับลดรุ่น parsedatetime เป็นเวอร์ชันเก่าโดยใช้ pip อาจเป็นแนวทางที่น่าเชื่อถือมากกว่าการแพตช์แหล่งที่มา แต่สิ่งนี้ใช้ได้สำหรับฉัน)