بلدي خط واحد عميل Dropbox لنظام التشغيل Linux

أريد أن أتحدث عن محاولتي لإنشاء عميل Dropbox بسيط وحيد الخط لنظام Linux باستخدام مكونات مجانية ومفتوحة المصدر فقط ، بما في ذلك rclone و entr و systemd .

السياق


في الآونة الأخيرة ، أسقط عميل Dropbox المسجّل لنظام Linux الدعم لجميع أنظمة ملفات Linux باستثناء نظام ext4 غير المشفر . والدليل الرئيسي الخاص بي ، للأسف ، مشفر.

في أوائل ديسمبر ، توقف العميل المملوك عن العمل. قام بتسجيل الخروج واقترح اختيار مجلد مزامنة مختلف في "نظام الملفات المدعوم".

بالمناسبة ، أقوم بتشغيل Ubuntu Bionic على ثينك باد t460s لمدة عامين.

لماذا أحتاج Dropbox


أنا استخدم وضع Org بشكل نشط: أقوم بتدوين ملاحظات بنص عادي ، ويقوم Dropbox باستمرار بإنشاء نسخ احتياطية من الملاحظات أثناء الكتابة.

إذا كنت تعمل أيضًا في مجال البنية التحتية للتخزين ، فإن حالة الاستخدام الخاصة بي تشبه إلى حد بعيد "النسخ المتماثل غير المتزامن الرئيسي" ، أي مع برنامج رئيسي واحد. جميع الإدخالات تذهب من خلال ثينك باد بلدي ، وهذا هو سيد. يعد مجلد Dropbox البعيد مجرد نسخة متماثلة للقراءة فقط ، والتي أحيانًا ما "أصدِر طلبات القراءة فقط" أو استخدمها كنسخة احتياطية لإنشاء معالج جديد عند فشل البرنامج الحالي أو سرقته.

ومع ذلك ، فإن إعداد النسخ المتماثل هذا أنقذ حياتي عدة مرات. ما زلت أمام عيني كيف رفض ثينك باد الإقلاع خلال جلسة السنة الثانية. منذ أن قمت دائمًا بتكرار كل الملاحظات في Dropbox ، لم أفقد أي بيانات وكنت قادرًا على عرض أحدث الملاحظات على جهاز Macbook الخاص بمي. شكرا يا أمي!

محاولات فاشلة


عندما توقف عميل Dropbox عن العمل ، ركزت على البحث عن عميل آخر متعدد الوظائف مماثل لنظام التشغيل Linux. من حيث المبدأ ، لا أمانع التبديل إلى خدمة أخرى ، مثل Google Drive أو AWS S3. بعض الخيارات overGrive و insync .

ومع ذلك ، توصلت إلى استنتاج مفاده أن هذه الحلول عملية للغاية وغير مناسبة للغاية لحالتي .

على سبيل المثال ، يحاول العملاء توصيل نظام ملفات عن بعد بالكمبيوتر . يحاولون جاهدين تجريد أنظمة الملفات عن بعد ، مما يجعلها تبدو وكأنها أنظمة محلية. كقاعدة عامة ، يقومون بتنفيذ التزامن ثنائي الاتجاه ، والتخطيط التلقائي لأنواع الملفات عن بعد لأنواع ملفات Linux ، إلخ.

لست بحاجة إلى هذا المستوى من التجريد. هناك حاجة إلى شيء بسيط لنسخ الملاحظات احتياطيًا باستمرار في السحابة أثناء الكتابة. بالإضافة إلى ذلك ، تجعل التجريدات من الصعب ضبط وتصحيح الأخطاء. ناهيك عن أن معظم هؤلاء العملاء متعددي الوظائف مملوكون.

rclone


rclone الأداة المساعدة rclone ، وأدركت على الفور: هذا بالضبط ما كنت أبحث عنه. برنامج بسيط ولكنه قوي. تشبه إلى حد بعيد أداة rsync ، فقط للتخزين السحابي.

على سبيل المثال ، rclone بتسامح الأخطاء (فحص النزاهة) وله خوارزميات تزامن فعالة وما إلى ذلك ، مع توفير واجهة CRUD بسيطة للتفاعل مع خدمات التخزين السحابية الشائعة ، بما في ذلك Amazon S3 و Google Drive و Dropbox.

يقوم الأمر التالي بمزامنة دليل org عن بعد مع الدليل المحلي /home/lpan/org .

 ORG_DIR=/home/lpan/org REMOTE=dropbox rclone sync $ORG_DIR $REMOTE:org 

entr


الأداة المساعدة لتنفيذ أوامر entr تستخدم API inotify . بشكل أساسي ، يتم تشغيل الأوامر عند تغيير الملفات دون اقتراع نظام الملفات.

إحدى حالات الاستخدام الشائعة هي إعادة إنشاء مشروع إذا تم تغيير أحد الملفات المصدر .

يأخذ entr قائمة بالمسارات المطلقة من stdin ثم ينفذ الأمر الذي تم تمريره كوسيطة إذا تم تغيير أي من الملفات المرصودة.

 WORKDIR=/path/to/myproject find $WORKDIR | grep "\.cpp$" | entr make 

النصي سطر واحد


الآن لدينا rclone و rclone . البرنامج النصي الناتج بسيط للغاية. اسمح لي أن أذكرك بأن حالة الاستخدام الخاصة بي لـ Dropbox بسيطة للغاية: لا تحتاج سوى إلى تكرار ملفات Org المحلية باستمرار عند تغييرها. لذلك ، يمكنك استخدام rclone لمراقبة الملفات و rclone "للتزامن" مع التخزين عن بعد.

البرنامج النصي الناتج ( /home/lpan/sync_dropbox.sh ) هو كما يلي:

 #!/bin/bash ORG_DIR=/home/lpan/org REMOTE=dropbox find $ORG_DIR | entr -r rclone sync -v $ORG_DIR $REMOTE:org 

تشغيل الخفي


البرنامج الخفي هو مجرد برنامج كمبيوتر يعمل في الخلفية. نجعل البرنامج النصي لدينا عملية خلفية بحيث يقوم باستمرار بمزامنة تغييرات الملفات المحلية في الخلفية مع نظام الملفات البعيد.

يوفر systemd واجهة للتحكم في عمليات الخفي.

أنا خلقت خدمة Dropbox في ~/.config/systemd/user/dropbox.service .

 [Unit] Description=Dropbox Daemon [Service] ExecStart=/home/lpan/sync_dropbox.sh Restart=always [Install] WantedBy=default.target 

يمكنك بعد ذلك التحكم في البرنامج الخفي باستخدام الأوامر التالية:

 # reload the service file systemctl --user daemon-reload # start the daemon systemctl --user start dropbox.service # start the daemon on login systemctl --user enable dropbox.service # inspect the status of the daemon systemctl --user status dropbox.service 

الخاتمة


في هذه المقالة ، ناقشنا كيفية تطبيق فلسفة UNIX واستخدام مجموعة من الأدوات المجانية والمفتوحة المصدر لاستبدال برنامج Dropbox الخاص بالملكية القديمة. استخدمنا rclone و rclone . كما أوضحت كيفية جعل هذه العملية خفية وإدارتها باستخدام systemd .

أريد أن أذكرك بأن الفكرة الأساسية هي البساطة. نريد حلول بسيطة لمهام بسيطة. حالة الاستخدام الخاصة بي لـ Dropbox بسيطة للغاية. وهذا هو السبب في أن البرنامج النصي المكون من سطر واحد أفضل من استخدام عميل سحابي وظيفي للغاية ومملوك.

شكرا جزيلا لقراءة! آمل حقًا أن تستمتع بهذا المنشور. إذا كنت تعرف أفضل طريقة للقيام بالشيء نفسه أو توسيع البرنامج النصي لحالة استخدام أخرى - فأعلمني في التعليقات!

Source: https://habr.com/ru/post/ar434460/


All Articles