مدتی قبل قصد داشتم با استفاده از Raspberry Pi یک سیستم دانلودر خودکارِ همواره روشن و قابل اطمینان راه اندازی کنم. با این کار هم از آهنگ استهلاک رایانهی رومیزی یا لپتاپ کاسته میشود و هم از هزینهها. رزبریپای بورد کوچک کم هزینه و کم مصرفی است که برای این کار گزینهی مناسبی به نظر میآید. راهنماهای زیادی برای راه اندازی این نوع سیستمها وجود دارند اما عموماً پیادهسازیهای سادهای هستند که ممکن است در خیلی از شرایط به مشکل بر بخورند و فایل را درست بارگذاری نکنند و به اشتباه اعلام کنند که بارگذاری با موفقیت به پایان رسیده است گرچه اینگونه نخواهد بود. از طرفی، امکاناتی مثل توقف یا ادامهی خودکار دانلودها سر زمانی خاص یا محدودسازی سرعت در این راهنماها در نظر گرفته نشده اند.
بنابراین تصمیم گرفتم تا سیستم مورد نیاز خودم را پیاده کنم، سیستمی بر مبنای Aria2 و چندین اسکریپت Bash و Python. پس از مدتی کار با این سیستم تصمیم گرفتم که آن را با نام لودباکس (LoadBox) روی GitHub قرار بدم.
هدف لودباکس، ایجاد یک راه حل قابل اطمینان، ایمن و همیشه در دسترس است که کمترین نیاز به دخالت کاربر را داشته باشد و راه اندازی سادهای داشته باشد. لودباکس جهت اجرا برروی سیستمهای Embedded طراحی شده و به طور پیشفرض بر روی بورد Raspberry Pi توسعه داده شده اما میتواند فارغ از نوع معماری CPU، بر روی سیستمهای لینوکسی دیگر مانند بوردهای Beaglebone و CubieBoard و حتی ماشینهای مجازی نیز اجرا شود. ممکن است بتوان در شرایطی خاص آن را بر روی مک و ویندوز (به کمک cygwin) هم اجرا کرد.
قابلیتهای لودباکس:
- بارگذاری از لینکهای مستقیم HTTP(S)/FTP/SFTP، بیتتورنت و Metalink
- ادامهی بارگذاری حتی در صورت قطع برق، مگر در حالتی که سرور مقصد این قابلیت را نداشته باشد.
- زمانبندی جهت توقف/ادامهی دانلودها و محدود/نامحدود سازی سرعت بارگذاری
- ارائهی رابط تحت وب جهت مدیریت دانلودها، ایمن شده با HTTPS و مکانیزم تأیید هویت کاربر با نام کاربری و کلمهی عبور
- تسهیل استفاده از فلشدیسک یا هارددیسک USB. در صورتی که اتصال قطع شود دانلودها متوقف خواهند شد و پس از اتصال دوباره، به طور خودکار عملیات Mount صورت میگیرد و دانلودها بدون خرابی فایلها، ادامه خواهند یافت.
- توانایی انتقال خودکار فایلهای ۱۰۰٪ بارگذاری شده از محل ذخیره به حافظههای تحت شبکه (NAS) مثلFTP و Windows Share (یا Samba) جهت آزاد کردن فضای آشغال شده.
- توانایی بارگذاری مستقیم به محلهای ذخیرهی تحت شبکه (NAS)، بطوری که در صورت قطعی ارتباط آن، بارگذاری متوقف خواهد شد و برای اتصال دوبارهی محل ذخیره تلاش خواهد کرد و سپس بارگذاری را ادامه خواهد داد.
- توانایی ارسال اعلان (Push Notifications) به گوشی هوشمند در صورت به پایان رسیدن دانلود یا رخ دادن خطا.
- پشتیبانی از صدور و تمدید خودکار گواهینامههای Let’s Encrypt برای ایجاد درگاه ارتباطی HTTPS.
در ادامه با روش سادهی راهاندازی و توضیحات بیشتر همراه باشید.
راهاندازی
در قدم اول لازم است دستگاه شما آمادهی کار باشد و دارای IP مشخصی باشد و از طریق SSH یا پورت Serial به آن متصل شوید و یا اینکه به طور مستقیم با صفحهکلید متصل به دستگاه دستورات را روی آن اجرا کنید.
لودباکس برای اجرا به aria2 نیاز دارد. در سیستمهای مبتنی بر دبیان میتوانید با این دستور آن را نصب کنید:
sudo apt-get install aria2
قدم بعدی، دریافت خود لودباکس است. برای این کار باید لودباکس را در یک دایرکتوری Clone کنید. اگر نمیدانید کجا را انتخاب کنید، از Home Directory خود استفاده کنید. با اجرای دستور cd به دایرکتوری Home خود بروید و دستورات زیر را به ترتیب اجرا کنید:
git clone https://github.com/zxcmehran/LoadBox.git cd LoadBox git submodule init git submodule update git submodule foreach git checkout .
حال برای اضافهکردن لودباکس به بوت، با اجرای دستور sudo nano /etc/rc.local محیط ویرایشگر را باز کرده و در انتهای آن خط زیر را اضافه کنید:
/home/[username]/LoadBox/startup.sh
این خط با فرض اینکه لودباکس را در Home Directory خود Clone کرده باشید نوشته شده است. قسمت [username] را با نام کاربری خود عوض کنید. اگر از Raspbian استفاده میکنید مقدار pi را قرار دهید:
/home/pi/LoadBox/startup.sh
و اگر در دایرکتوری دیگری Clone کردهاید، آدرس کامل فایل startup.sh را وارد کنید. با فشردن Ctrl+O و سپس Ctrl+X تغییرات را ذخیره کنید و خارج شوید.
تمام! کافی است سیستم را ریبوت کنید!
sudo reboot
حدود یک دقیقه صبر کنید تا سیستم به طور کامل بوت شود و لودباکس اجرا شود. حال میتوانید از طریق مرورگر وب دانلودهای خود را اضافه کنید! کافیست آدرس آن را در مرورگر خود وارد کنید. با فرض اینکه آیپی سیستم 192.168.1.200 باشد، آدرس http://192.168.1.200:8000 را باز کنید.
این روند فقط یک راه اندازی پایهای بود. اگر مایل هستید در مورد جزئیات راهاندازی بیشتر بخوانید سری به اینجا بزنید.
محل ذخیره

در سیستمهای Embedded مثل رزبریپای، کل فایلسیستم بر روی یک SD Card قرار دارد و اگر کاربرد سیستم به گونهای باشد که تعداد دفعات خواندن/نوشتن بر روی کارت حافظه زیاد باشد، بعد از مدتی عمر کارت حافظه تمام شده و میسوزد. از طرفی معمولاً حجم کمی در کارت حافظه آزاد و قابل استفاده است. این دلایل موجب میشوند تا به سمت استفاده از فلشدیسک و هارددیسک برویم. لودباکس به طور خودکار دیسکهای USB را Mount میکند و در صورتی که اتصال دیسک قطع شود، دانلودها را متوقف میکند و پس از اتصال دوباره دانلودها را ادامه خواهد داد. با استفاده از این راهنما میتوانید این قابلیت را فعال کنید.
از طرفی، ممکن است حافظهی فلشدیسک نیز به زودی پر شود و فضای خالی روی آن باقی نماند. لودباکس این قابلیت را دارد که فایلهایی که دانلودشان تمام شده را به محلهای ذخیرهسازی تحت شبکه انتقال دهد. در صورتی که در میان انتقال فایل، اتصال محل ذخیرهسازی با شبکه قطع شود، سیستم تلاش میکند تا ارتباط با محل ذخیرهسازی را دوباره برقرار کند و فایل دانلود شده را از نو انتقال دهد. برای فعالسازی از این راهنما استفاده کنید.
حتی اگر میخواهید فایلهایی با سایز خیلی بزرگ دانلود کنید که هر یک از آنها بهقدری بزرگ است که قابل گنجاندن بر روی فلشدیسک نیست، میتوانید مستقیماً بر روی یک محل ذخیرهسازی تحت شبکه دانلود کنید، چرا که محلهای ذخیرهسازی تحت شبکه، معمولاً هارددیسکهای تحت شبکه یا یک دایرکتوری Share شده بر روی PC شما هستند و از نظر ظرفیت آزاد مقدار قابل توجهی نسبت به فلشدیسکها دارند. بطور مشابه، لودباکس ارتباط بین سیستم با این محل ذخیرهسازی را نیز مدیریت خواهد کرد و در صورت قطع ارتباط دانلودها را متوقف و سعی بر برقرارسازی دوبارهی ارتباط میکند. پس از آن، به دانلودها ادامه خواهد داد. برای استفاده از این قابلیت هم میتوانید از این راهنما کمک بگیرید.
امنیت، Https و مکانیزم تأیید هویت کاربر

رابط کاربری وب در دسترس عموم است و همه میتوانند آن را باز کرده و از آن استفاده کنند. در صورتی که قصد داشته باشید این دسترسی را محدود کنید، میتوانید از تأیید هویت استفاده کنید. اما این کار جهت تأمین امنیت کافی نیست. نرمافزار Aria2 یک درگاه ارتباطی RPC دارد که به کاربر اجازه میدهد با استفاده از نرمافزارهای جانبی آن را کنترل کند. درواقع رابط وب نیز از این درگاه استفاده میکند. لازم است که این درگاه نیز با یک عبارت عبور محافظت شود و این عبارت فقط در دسترس رابط وب و دیگر اجزای مجاز سیستم باشد. با این کار، دسترسی به درگاه RPC را فقط به خود لودباکس محدود میکنیم.
مشکل دیگری که ممکن است گریبانگیر سیستم شود، حملات موسوم به مردی در میان (Man-in-the-middle) هستند که موجب شنود اطلاعات عبوری از درگاه RPC و رابط وب میشوند و ممکن است سیستم شما را به خطر بیاندازند. خصوصاً اگر سیستم شما در محیط اینترنت قابل دسترسی است، این نگرانی تشدید میشود. جهت جلوگیری از این حملات میتوانید از HTTPS استفاده کنید. در این صورت اطلاعات شما بصورت کد شده منتقل میشوند و امکان شنود تقریباً صفر میشود.
لودباکس از گواهینامههای وب Let’s Encrypt نیز پشتیبانی میکند. این گواهینامهها توسط تیمی با پشتیبانی گروهی از بزرگان وب مثل موزیلا، سیسکو و کروم توسعه داده شدهاند و کاملاً ایمن و رایگان هستند. لودباکس شما را در ایجاد گواهینامه و تمدید خودکار آن یاری میکند.
برای اطلاع بیشتر از نحوهی ایمنسازی سیستم، به این راهنما مراجعه کنید.
اسکریپتنویسی و کنترل دانلودها
مجموعهای از اسکریپتهای Python در لودباکس گنجانده شدهاند که بعضی از آنها برای عملکرد اصلی سیستم هستند و بعضی دیگر دانلودها را مدیریت میکنند. برای مثال، اسکریپت stopdownloads.py به محض اجرا تمامی دانلودها را متوقف میکند. میتوانید با قرار دادن آدرس این فایل در Crontab، در زمان خاصی همهی دانلودها را متوقف کنید. حتی میتوانید اسکریپتهای شخصی خود را به آن اضافه کنید، مثلاً اسکریپتی بنویسید که قسمتهای جدید سریال مورد علاقهتان را به طور خودکار به لیست دانلودها اضافه کند! اگر اسکریپتی نوشتید خوشحال میشوم اگر آن را با من هم به اشتراک بگذارید تا آن را در لودباکس قرار بدم. :) برای مشاهدهی نمونه و آشنایی با اسکریپتهای موجود به این صفحه مراجعه کنید.
ارسال اعلانها
برای ارسال اعلان از کانال Maker سرویس اینترنتی IFTTT استفاده شده است. برای راهاندازی آن به یک حساب کاربری رایگان IFTTT و نصب نرمافزار آن بر روی تلفن هوشمند خود نیاز دارید. پس از آن با فعالسازی کانال Maker و دریافت کد شناسایی آن، میتوانید پیکربندی لودباکس را انجام داده و با فعالسازی این دستورالعمل از پیش تعریف شده برای ارسال اعلان، آنها را بر روی تلفن همراه خود دریافت کنید. در صورتی که مایل باشید میتوانید دستورالعملی شخصی طراحی کنید و یا حتی از اعلانهای ارسالی استفادههای دیگری بکنید، برای مثال آنها را در یک متن در دفترچهی OneNote خودتان ذخیره کنید و یا مثلاً اعلانها را به خودتان ایمیل کنید. برای دریافت اطلاعات بیشتر به این صفحه مراجعه کنید.
یک پیکربندی حالب!
در پیکربندیای که خودم استفاده میکنم، رابط وب را با تأیید هویت و HTTPS (با Certificate معتبر) ایمنسازی کردهام و با Port Forwarding در مودم، درخواستهای خارجی از اینترنت را به لودباکس انتقال میدهم و همچنین از یک سرویس Dynamic DNS نیز استفاده میکنم. با این پیکربندی، در هر جایی که باشم با وارد کردن نام دامنهی خود رابط وب لودباکس را باز میکنم و پس از تأیید هویت، لینکها را قرار میدهم و شب که به منزل برمیگردم، فایلهای دانلود شده را از هارددیسک شبکهی خانگی برمیدارم! :) عالی!