اینم یه تجربه پراکنده دیگه!

من امروز خواستم که به دلایلی لپ‌تاپم رو با یه لپ‌تاپ یکی از اعضای خانواده عوض کنم. لپ تاپ مقصد ویندوز داشت و خب من لینوکس دوست داشتم. همچنین بایستی بعد از انجام انتقال روی لپ‌تاپ من ویندوز نصب میشد که کاربر جدید لپ‌تاپم مشکلی پیدا نکنه.

خب اول بگم که کل پارتیشن‌های لپ‌تاپ من ext4 بود و نمیشد بدون خراب کردن پارتیشن بندی این انتقال انجام بشه. همچنین حجم کل فایلهای روی لپ‌تاپ من عددی نزدیک به ۸۵۰ گیگا بایت بود که خب عدد بسیار بزرگیه. همچنین باید بگم که کارت شبکه لپ تاپ من متاسفانه ۱۰۰ مگه.

مراحل کارهای انجام شده اینا بود:

  • نصب کردن لینوکس روی لپ تاپ  مقصد
  • نصب samba رو کامپیوتر خودم
  • مونت کردن samba به عنوان یک فولدر در لپ تاپ مقصد
  • و کپی کردن بهینه فایلها با استفاده از rsync

نکته اساس این کار استفاده از rsync هست چون حجم اطلاعات اونقدر زیاده که حدودا ۲۰ ساعت انتقالش طول میکشه. توی این زمان زیاد هزارتا اتفاق ممکنه بیفته از قطع شدن برق تا مشکل شبکه و حتی در موارد خاص قاط زدن سیستم عامل. مزیت rsync اینه که بصورت بهینه کلی فایل رو کپی میکنه و هیچ پیش فرضی نداره که همه انتقال پشت سر هم انجام بشه و انتفاق میتونه قطع بشه و دوباره شروع بشه. همین باعث میشه که من با خیال راحت‌تر انتقال رو انجام بدم و تا الان حدود ۳۵۰ گیگ از اطلاعات رو انتقال بدم و هنوز هم انتقال ادامه داره.

همین!

پ.ن. این انتقال طولانی من رو به این نتیجه رسوند که داشتن یک NAS در خونه از اوجب واجباته

اینم یه تجربه پراکنده دیگه!

سیستم‌های مبتنی بر رایانش ابری بسیار باب شدند و خب هر کسی سعی میکنه که بصورتی خدمات ارائه شده رو از قالب سنتیش راه کنه و اون رو در ابرها به پرواز در بیاره. البته لازم میدونم که بگم رایانش ابری همه چیز نیست و برخی از نیازهای دنیای امروز رو جواب میده که بازم اگه عمری بود دربارش مینویسم.

سرویس openshift که توسط غول دنیای متن باز redhat تاسیس شده و اتفاقا یه سرویس اولیه مجانی هم داره سعی میکنه بستر برنامه نویسی مورد نیاز رو در اختیار برنامه نویسان قرار بده و بعدش برنامه نویسی بتونن با استفاده از git نرم افزارهاشون بدون نگرانی در مورد بستری که قرار این نرم افزار رو اجرا کنه مورد آزمایش و تست قرار بدن.

اتفاقا پلتفرمهای پشتیباین شده تقریبا کامل هستند node.js، j2ee، python، django، perl، ruby، ruby on rails رو پشتیبانی میکنه و پایگاه داده‌هایی هم که داره  mySql، postgreSql و monogoDB هست. که تقریبا ۹۰ درصد نیازهای یک برنامه نویس رو پشتیبانی میکنه. اتفاقا چون از git هم برای نصب و راه‌اندازی  هر برنامه استفاده میشه نسخه‌های قبلی اون هم  نگه داشته میشه و این خودش بسیار خوبه.

همچنین یکی دیگه از چیزایی که این سیستم پشتیبانی میکنه اینه شما میتونید از jenkins هم استفاده کنید که یک پلتفرم continious integration هست که به شما کمک میکنه بصورت اتوماتیک نرم افزار شما سر هم بشه و build بشه و تست میشه که آیا قسمت‌های مختلف اون با هم تضاد دارند یا نه. که خب این نکته خیلی خارجیه و هنوز من جایی در اطرافم رو ندیدم که واقعا از یک چنین سیستم در محیط عملیاتیشون استفاده کنند

البته باید بگم که سیستم های دیگه ای مثل heroku هم برای اینکار وجود داره اما من این openshift بیشتر خوشم و اگه بازم عمری بود در مورد سیستم‌های مشابه یکم می‌نویسم.

خب به نظر میرسه وبلاگ من رو خاک گرفته! میدونم و تنها دلیلی که دارم الان مینویسم اینه دلم رزبری پی میخواد. البته بگم که من یه دونه پاندابرد دارم ولی دلم یکی از اینا رو هم میخواد.

قبلش بگم که این کار اندکی شیطنت و شیطان صفتی توش داره پس اگه خواستید انجامش بدید وجدان داشته باشید

این داستانی که میخوام براتون تعریف کنم توی چله تابستون وقتی که کسی دانشگاه نیست اتفاق افتاده و خب ما چون پایه ثابت خوابگاه بودیم! بودیم!اون سالی که من دانشجو بودم و این اتفاق افتاد دانشگاه صنعتی امیرکبیر اینترنتش رو از طریق سه یا چهارتا پروکسی squid به دانشجوها و اساتیدش در مقاطع مختلف ارائه میداد. اون سال بخاطر چله تابستون بودن دوستان انفورماتیک زحمت کشیده بودن و به همه بدون پسورد سرویس میدادن. یعنی هیچ یک از پراکسی ها پسورد نداشت و تنها محدودیت رو روی آی پی آدرس شما اعمال میکردن و شما رو محدود میکردن خب شما هم اگه جای من بودید دوست داشتید از این فرصت بوجود اومده استفاده کنید.

کل کاری که من کردم این بود که اولا تعداد آی پی هام توی لینوکسم که اگه اشتباه نکنم یه فدورا ۱۵ بود زیاد کردم. یه برنامه پیدا کردم که بتونیم بین پراکسی‌های مختلف تقسیم بار انجام بدم و خب یه سری بازی wii داشتم که میخواستم از megaupload خدا بیارمز دانلودش کنم. خب سعی میکنم که مرحله به مرحله توضیح بدم که چیکار کردم

اول : تقسیم بار روی سرور ها اولین کاری که کردم با استفاده از یه دستور خوب لینوکس به اینترفیس شبکه ام به تعداد کافی آی پی دادم

ifconfig eth0:1 192.168.49.8
ifconfig eth0:2 192.168.49.9
ifconfig eth0:3 192.168.49.10
ifconfig eth0:4 192.168.49.11
ifconfig eth0:5 192.168.49.12
ifconfig eth0:6 192.168.49.13

خب مرحله بعد این بود که بتونم با استفاده از هریک از این آدرسها به اون پروکس‌ها وصل بشم. تحقیقات بسیاری در این زمینه انجام دادم که چطوری این عمل امکان پذیره اما نمیدونم چطور (پیری و هزار عیب) به این نتیجه رسیدم که یه ابزار بسیار خوب برای این کار که خیلی هم ساده عمل میکنه وجود داره به اسم balance که این کار رو به شکل ساده و خیلی راحتی انجام میده تنها نیاز بود که من بگم روی کدوم آدرس به کدوم یک از پروکسی ها وصل بشه. کاری که بالانس میکنه یه پروکسی دیگه بوجود میاره که هر درخواست به اون روی مابقی پروکسی ها تقسیم میشن به همین سادگی. پس کاری که من کردم این بود که به ازای هر آی پی یک بالانس بالا آوردم و در نهایت یک بالانس در لایه بالاتر همه این بالانسهای رو به هم متصل میکرد که کدش تو پایین اومده

balance -B 192.168.49.8 8001 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.9 8002 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.10 8003 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.11 8004 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.12 8005 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.13 8006 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080

balance 8000 localhost:8001 localhost:8002 localhost:8003 localhost:8004 localhost:8005 localhost:8006

خب حالا ما یه لود بالانسر داریم که اگه تعداد زیادی کانکشن بهش برسه اون رو روی آی پی های مختلف روی پروکسی‌های مختلف تقسیم میکنه. بخش اول کار تمومه

دوم: دانلود بدون نظارت از megaupload چند تا مشکل توی دانلود از megaupload وجود داشت. یکی اینکه مگا آپلود فی…ل…تر بود. خب راه حلش چی میتونست باشه. من گشتم و گشتم تا متوجه شدم که میشه آدرس سایت رو به این صورت هم استفاده کرد whateveryoucouldthinkof.megaupload.com خب این کشف بزرگی بود و خوشبختانه اکثر این آدرسا فیلتر نبود. پس اول مشکل به حول و قوت خود مگا آپلود حل شد. مشکل بعدی این بود که این سایت برای اینکه بگذاره ما ازش دانلود کنیم نیاز به یوزر نیم و پسورد داشت که معنیش این بود که باید یه بروزر بصورت دستی لاگین بشه تا بشه ازش استفاده کرد. راه حل این مساله هم خدا رو شکر ساده بود. با استفاده از گوگل و یکم سرک کشیدن اینور اونر متوجه شدم اگه بتونم کوکی لاگین رو بسازم میتونم به خیلی از برنامه های دانلود که از خط فرمان پشتیبانی میکنن این کوکی رو میخونن و کارشون رو انجام میدن. خط فرمانی که من برای لاگین کردن به مگا آپلود پیدا کردم این بود

curl -c cook --data "login=1&redir=1&username=USER&password=PASS" "http://www.pashmak.megaupload.com/?c=login" > /dev/null

که یه فایل کوکی به نام cook میساخت. حالا میموند اینکه من از یه برنامه با تعداد کانکشن زیاد و بصورت همزمان فایلها رو دانلود کنم. اونم به کمک دانلودر قوی aria2 حل شد. با استفاده از این دانلودر میتونستم لیستی از فایلها رو بهش بدم و بگم به چند تا کانکشن همزمان اونها رو دانلود کن. دستور دانلودم هم این بود

#!/bin/bash
Name="$1"
ListName="$Name.list"
outDir="$Name"
LogName="$Name.log"

mkdir "$outDir"
aria2c -c --http-proxy=localhost:8000 --load-cookies=cook --split=25 --max-concurrent-downloads=4 --auto-file-renaming=false --dir="$outDir" --log="$LogName" -i "$ListName"

خب بعدش واسه اینکه کل فایلها رو یکجا بتونم دانلود کنم از یه شل اسکریپت دیگه استفاده کردم که اونم اینجا میارمش

#!/bin/bash
for i in *.list
do
	./mega_downloader_rev.sh "${i%.list}"
done

خب حالا بریم سراغ مرحله بعد.

مرحله سوم : استخراج اتوماتیک لیست فایلها از متن یک صفحه وب بسیاری از جزئیات این بخش رو یادم نمیاد و خب خیلی هاش رو هم دستی انجام دادم. اما کلیت این بود که متن‌های تکرار شونده (تگ های html و …) توی لیست رو پیدا کردم و حذف کردم. بعدش یه پارسر با سی پلاس پلاس نوشتم‌(اون زمان به awk و sed و …) مسلط نبودم و فایلها رو استخراج کردم که توی هر کردوم یه چیری شببه این بود

http://www.pashmak.megaupload.com/?d=CNWWDFO6
http://www.pashmak.megaupload.com/?d=N9DTPYU5
http://www.pashmak.megaupload.com/?d=S5JEGPJP
http://www.pashmak.megaupload.com/?d=4UGW2VOM
http://www.pashmak.megaupload.com/?d=DJ1CXILH
http://www.pashmak.megaupload.com/?d=H4LZ5UJN

همین به کسی پیشنهاد نمیکنم که این کار رو انجام بده اما من انجام دادم و لذتش رو بردم. یادم رفت بگم من اون زمان میتونستم توی یک شب تا صبح (چون در طول روز نامردی بود استفاده از این تریک) میتونستم نزدیک به ۸۰ گیگ از اینترنت دانلود کنم و بخاطر این موفقیت به خودم و لینوکسم میبالم!