مقدمة
للاحتياجات الشخصية في المنزل ، قمت بترقية VSphere ، حيث أقوم بتشغيل جهاز توجيه افتراضي وخادم Ubuntu كخادم وسائط ومجموعة من الأشياء الجيدة الأخرى ، ويجب أن يكون هذا الخادم متاحًا من الإنترنت. لكن المشكلة هي أن مزود خدمة الإنترنت الخاص بي يوفر ثابتًا مقابل المال ، والذي يمكن دائمًا استخدامه بشكل أفضل. لذلك ، استخدمت مجموعة من ddclient + cloudflare.
كان كل شيء على ما يرام حتى توقف ddclient عن العمل. بعد التقاطها قليلاً ، أدركت أن الوقت قد حان للعكازات والدراجات ، حيث بدأ الأمر يستغرق وقتًا طويلاً للبحث عن مشكلة. في النهاية ، تحول كل شيء إلى شيطان صغير يعمل فقط ، لكني لست بحاجة إلى المزيد.
من يهتم - مرحبًا بك تحت القط.
الأدوات المستخدمة وكيف تعمل "هي"
لذا فإن أول شيء تعلمته على موقع الويب cloudflare هو كل ما تحتاج إلى معرفته
بشكل عام ، تم أخذ الغلاف كأساس
أخذت أحد الأمثلة لتحديث DNS وأضفت استخدام ملف التكوين والقدرة على تحديث العديد من سجلات A داخل منطقة ، وبالطبع عدد غير محدود من المناطق.
المنطق كالتالي:
- يتلقى البرنامج النصي قائمة بالمناطق من ملف التكوين ويتكرر عبرها
- في كل منطقة ، يتكرر البرنامج النصي عبر كل سجل DNS من النوع A أو AAAA ويتحقق من IP العام مقابل السجل
- إذا كان IP مختلفًا ، فإنه يغيره ؛ وإذا لم يكن كذلك ، فإنه يتخطى تكرار الحلقة وينتقل إلى الحلقة التالية.
- ينام في الوقت المحدد في ملف config
التثبيت والإعداد
من المحتمل أن يكون من الممكن عمل حزمة .deb ، لكنني لست قويًا في هذا ، وليس الأمر بهذه الصعوبة.
لقد وصفت العملية بالتفصيل في README.md
لكن فقط في حالة ، سأصف باللغة الروسية بعبارات عامة:
- تأكد من تثبيت python3 و python3-pip ، إذا لم يكن الأمر كذلك ، فقم بالتثبيت (على Windows ، تم تثبيت python3-pip مع Python)
- استنساخ أو تنزيل المستودع
- قم بتثبيت التبعيات المطلوبة.
python3 -m pip install -r requirements.txt
- قم بتشغيل برنامج التثبيت النصي
لنظام التشغيل Linux:chmod +x install.sh sudo ./install.sh
لنظام التشغيل Windows: windows_install.bat
- قم بتحرير ملف التكوين
لنظام التشغيل Linux:sudoedit /etc/zen-cf-ddns.conf
للنوافذ:
افتح الملف zen-cf-ddns.conf في المجلد حيث قمت بتثبيت البرنامج النصي.
هذا ملف JSON عادي ، الإعدادات ليست معقدة - لقد وصفت على وجه التحديد منطقتين مختلفتين فيه كمثال.
ماذا وراء المثبتات؟
install.sh لنظام التشغيل Linux:
- يتم إنشاء مستخدم لتشغيل البرنامج الخفي ، دون إنشاء دليل رئيسي والقدرة على تسجيل الدخول.
sudo useradd -r -s /bin/false zen-cf-ddns
- يتم إنشاء ملف لكتابة السجل إلى / var / log /
- قم بتعيين مالك ملف السجل على المستخدم الذي تم إنشاؤه حديثًا
- يتم نسخ الملفات إلى أماكنها (config in / etc ، والملف القابل للتنفيذ في / usr / bin ، وملف الخدمة في / lib / systemd / system)
- تم تفعيل الخدمة
windows_install.bat لنظام التشغيل Windows:
- ينسخ الملف القابل للتنفيذ وملف التكوين إلى مجلد يحدده المستخدم
- ينشئ مهمة في المجدول لتشغيل برنامج نصي عند بدء تشغيل النظام
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
بعد تغيير التكوين ، يجب إعادة تشغيل البرنامج النصي ، كل شيء في Linux بسيط ومألوف:
sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status
بالنسبة لنظام التشغيل Windows ، سيتعين عليك إنهاء عملية pythonw وإعادة تشغيل البرنامج النصي (أنا كسول جدًا في كتابة خدمة ضمن Windows في C #):
taskkill /im pythonw.exe
هذا يكمل التثبيت والتكوين ، استخدمه لصحتك.
بالنسبة لأولئك الذين يرغبون في إلقاء نظرة على كود Python غير الجميل ، هنا هو
رخصة معهد ماساتشوستس للتكنولوجيا ، لذا افعل بها ما تريد.
ملاحظة: أفهم أنه اتضح أنه عكاز صغير ، لكنه يتواءم مع مهمته بضجة كبيرة.
محدث: 11.10.2019 17:37
لقد وجدت مشكلة واحدة أخرى ، وإذا أخبرني أحدهم بكيفية حلها ، فسأكون ممتنًا جدًا.
المشكلة هي أنه إذا قمت بتثبيت التبعيات بدون تثبيت sudo python -m pip -r ... ، فلن تكون الوحدات النمطية مرئية من تحت مستخدم الخدمة ، ولن أرغب في إجبار المستخدمين على تثبيت الوحدات تحت sudo ، وهذا ليس صحيحا.
كيف تجعلها جميلة؟
UPD: 11.10.2019/19/16 XNUMX:XNUMX تم حل المشكلة باستخدام venv.
كانت هناك العديد من التغييرات. الإصدار القادم سيكون في الأيام القليلة المقبلة.
المصدر: www.habr.com