از اونجاییکه این مطلب رو دوست عزیزی نوشتن که خوره دنیای کامپیوتر و نرمافزار هستند ؛ لازمه برای درک بهتر کاربردهای احتمالی در دنیای نرمافزار یکسری تقلب به دوستان الکترونیکی و سختافزاری برسونم شاید باعث بشه که فلسفه و کاربرد این مساله رو بهتر نشونبده. به احتمال خیلیزیاد اسم سیشارپ (#C) به گوشتون آشنا باشه! توی ایران اغلب افرادی که دستشون به کیبورد خورده خودشون رو برنامهنویس میدونن و اغلب مسلطبه زبان برنامهنویسی سیشارپ هم هستند! هیچکسی منکر این قضیه نیست که داتنت واقعا برنامهنویسی برای پلتفرم ویندوزی رو ساده کرده؛ اونقدر ساده که حتی مادربزرگها هم کدنویس شدهاند ? حالا فرضکنید این مقدار از راحتی رو توی دنیای متنباز لینوکس داشتهباشید؛ واقعا وسوسهکننده است. شاید شما هم قبلا رزبری رو تهیهکردهباشید به امید اینکه بتونید روش برنامه خودتون رو بریزید اما کارکردن با لینوکس و سرکلهزدن با GCC شما رو خسته کرده باشه و کلا قیدش رو زدهباشید! این مقاله دقیقا بدرد شما میخوره چون بهسادگی قادرخواهیدبود برنامه دلخواه خودتون رو بااستفادهاز داتنت کُور (Net Core.) برروی هرنوع برد لینوکسی که دوست دارید بنویسید. اینکه ماکروسافت پا به عرصه متنباز گذاشته ؛ واقعا جایتامل داره؛ چرا میگیم ماکروسافت پا به عرصه متنباز گذاشته؟ دقیقا بخاطر همین فعالیتهای اخیرش درخصوص متنباز منتشرکردن سورسها، نمونش ویژوالاستودیو کد؛ یا دات نت کُور و… Net Core. هنوز از رابطگرافیکی(GUI)پیشتیبانی نمیکنه البته قراره توی ورژن سوم GUI هم بهش اضافهبشه ولی خوب کی اهمیت میده هنوز خیلی کارها هست که میشه انجامداد؛ دعوتتون میکنم که این مقاله و قسمتهای بعدی رو مطالعهکنید.
قبلاً اینجا و اینجا درباره بخشهایی از دنیای فوقالعاده و گسترده نرمافزار صحبتکردیم، قراره توی این مقاله توضیح بده یم چطور با یه حمله جانانه قسمتیاز دنیایالکترونیک رو تسخیر کنیم! معمولاً توی بحثهای گاهو بیگاهی که با دوستان الکترونیکی دارم، وقتی کار به جاهای باریک میکشه و عرصه برشون تنگ میشه سریع یه برد از توی جیبشون درمیارن و میگن ببین برایما همین کافیه! همین رو وصل میکنیم به منبع تغذیه و پروژه کار میکنه، مثل شما لازمنیست کامپیوتر و سرور و nتا نرمافزار نصبکنیم تا بالاخره پروژه بیاد بالا! هرچند من محکوم میکنم این استدلال رو اما به هرحال قسمتیاز حرفشون منطقیه! حالا ما قراره با یه لشکرکشی جانانه ناتآنلی این بخش از دنیاشون رو تصرفکنیم، بات آلسو در پایان پا را فراتر بگذاریم و ادعاکنیم میتونیم پروژههایی رو انجامبدیم که احتمالاً درصد زیادی از دوستان الکترونیکی حداقلبه تنهایی قادربه انجامش نیستند.
ندای وظیفه
برای شروع نبرد اول باید جنگجویان رو معرفی کنیم.
اول از همه لیدیز اند جنتلمنز، نیروی نفوذی ما: رزبریپای!
به لطف سیستمعامل روی این بردهای بامزه، میشه با بعضی زبانهای برنامهنویسی سطحبالا برنامه نوشت و از دست پیچیدگیهای زبانهایی مثل C یا ++C راحت شد.
بنابراین نیروی دوم میشه انتخاب زبانی که قابلیت اجرا برروی رزبریپای رو داشتهباشه، ما اینجا از .Net Core استفاده میکنیم.
و درنهایت سیستمعامل که حلقه ما رو تکمیل میکنه، هرچند سیستمعامل پیشنهادی مخصوص این بردها Raspbian هست اما میشه روی رزبریپای سیستمعاملهای مختلفی نصبکرد.
نقشه حمله
نقشه ساده است، یه پروژه خیلی مقدماتی مینویسیم و روی رزبریپای اجرا میکنیم، و وقتی دشمن هنوز درگیر حمله اولیه است، ضربهنهایی رو بهش وارد میکنیم!
حمله
طبیعتاً اولینگام انتخاب برد مناسبه، از اونجاییکه ما زبان برنامهنویسی .Net Core رو انتخابکردیم حتماً باید رزبریپای ۲ یا ۳ رو داشتهباشیم، امکان نصب .Net Core روی رزبری پای ۱ یا زیرو نیست. من یه برد رزبریپای ۳ از بچهها قرضگرفتم! اینجا میتونید لیست بعضی از سیستم عاملهایی که میشه نصب کرد رو ببینید، ما Raspbian Stretch Lite رو انتخاب کردیم، چون هم حجم کمتری داره و هم سبکتره و طبیعتاً منابع و انرژی کمتری مصرف میکنه. هرچند ممکنه نداشتن واسط گرافیکی برای بعضیها خوشایند نباشه، شما میتونید سیستم عامل محبوب خودتون رو دانلود کنید.
نصب سیستمعامل روی رزبری
اول فایل فشرده رو از سایت دانلود کنید، اگه خیلی از کامند زدن خوشتون نمیاد میتونید از نرمافزار Etcher استفاده کنید که برای لینوکس، ویندوز و مک نسخه قابل نصب داره. کار کردن باهاش هم اینقدر آسونه که نیازی به توضیح نیست، فایل رو انتخاب میکنید، درایو MicroSD رو پیدا میکنید و تمام. اگه هم دوست ندارید نرمافزار اضافه نصب کنید، توی لینوکس میتونید از این دستور استفاده کنید:
هشدار: اگه یکم بی دقتی کنید ممکنه پارتیشنهای دیسکتون رو بجای مموری فرمت کنید، بهتره بیشتر مواظب باشید!!
اول دستور زیر رو بزنید تا لیست پارتیشنها رو ببینید:
lsblk
که بستهبه پارتیشنهایی که دارید ممکنه چیزی شبیه این ببینید:
توی تصویربالا دیسک موردنظرما mmcblk0 هستش و بعد دستورزیر رو با جایگزینکردن اسم فایل و اسم پارتیشن اجرا میکنیم.
sudo dd bs=4M if=2018-11-13-raspbian-stretch-lite.img of=/dev/mmcblk0 status=progress conv=sync
بههمینسادگی، با هر روشی که رفتید مموری رو داخل رزبریپای بگذارید و روشنش کنید.(خود من چندساعت بخاطر استفادهاز رمریدر خراب وقتم تلفشد!) نامکاربری و پسورد پیشفرض pi , raspberry هستش، قبلازاینکه بریم سراغ پروژه یهکارمهم دیگه باید بکنیم و اون انجام تنظیمات شبکه برای رزبری هستش.
sudo raspi-config
این دستور رو بزنید تا واسط گرافیکی به سبک صدسال پیش اما فوق العادی کاربردی رزبری رو ببینید:
ابزار دمدستی برای اسکرینشاتگرفتن تو اون محیط پیدانکردم!
خیلیساده گزینه Network Options رو انتخاب کنید، اگه بردتون Wi-Fi رو پشتیبانی میکنه که عالیه، اسم شبکه و کلمه عبورش رو وارد کنید و تمام، اگه هم از شبکهداخلی استفاده میکنید که آیپی رو مشخصکنید و تمام. (پیشنهاد میکنم اگه از کاراکترهای ویژه مثل # تو کلمه عبورتون استفادهکردید اول مطمئنبشید که کارکاتر درست رو وارد میکنید چون ممکنه کیبوردها مثلهم نباشند) رزبری رو فعلاً همینجا رهاش میکنیم و میریم سراغ پروژه.
پروژه چی شد؟
البته واضح و مبرهن است که ما اینجا قرارنیست آموزش برنامهنویسی .Net Core رو قراربدیم. اگه علاقهداشتهباشید میتونید اینجا روی گیتهاب من سورسکامل پروژه رو ببینید. فعلاً توی این قسمت از حمله، تغییر چندانی توی پروژه ایجادنکردیم، این چندخط رو کمی توضیحمیدیم:
namespace rpi.Controllers { [Produces("application/json")] [Route("")] [ApiController] public class DataController : ControllerBase { [HttpGet] public async Task<IActionResult> SayHello() { return Ok("Hi from pi!!"); } } }
این پروژه موقع اجرا روی پورت۵۰۰۰ اجرا میشه، کل این خطها میگن اگه کسی اومد و من رو با دستور GET فراخوانیکرد(مثلا توی مرورگرش آدرس localhost:۵۰۰۰ رو باز کرد) یه سلامی بهش برسون! تااینجاکه روی پروژه کارمهمی نکردیم، کارمهم رو فعلاً خود .Net Core انجاممیده چون میشه با منتشرکردنش برای arm-7 اون رو آماده انتقالبه رزبریپای کرد! به محل ذخیره پروژه میریم و این دستور رو میزنیم:
dotnet publish -c Release -r linux-arm
با این دستور خروجی پروژه روی فولدر \bin\Release\netcoreapp2.0\linux-arm\publish قرار میگیره، رزبری رو خاموش کنید، مموری رو مجدداً به کامپیوتر متصل کنید، یه پوشه مثلاً به اسم publish درستکنید و تمام فایلها رو به اون منتقلکنید.(طبیعتاٌ اگه با لینوکس آشناباشید میدونید که باید توی فولدر home\pi این فولدر رو ایجادکنید) مجدداً مموری رو داخل رزبریپای بگذارید و روشنش کنید به داخل فولدری که ساختید برید. بستهبه اسم پروژهای که ساختهاید (من اسم پروژه رو rpi گذاشتم) دستوری مشابه این را باید اجراکنید.
./rpi
اگه کانفیگ کارت شبکه رو درست انجامدادهباشید میتونید توی مرورگر کامپیوترتون که احتمالاً با رزبری توی یک شبکه قرار داره، آیپی رزبری رو با شماره پورت۵۰۰۰ بزنید و خروجیزیر رو ببینید:
دشمن پشت دروازه شهر
اگه تونستید خروجی بالا رو بگیرید، بهتون تبریکمیگم! اینجا، دقیقاً همینجا لحظه فروریختن اولین دژ دفاعی دشمنه! اولین پیروزی در سرزمین سیمها! اگه هنوز داغ هستید! باید بگم همین مرحله یعنی ما تونستیم(و طبیعتاً بازهم میتونیم!) خیلیاز برنامهها که نیازبه پردازش سنگین و عجیبغریب نداره رو بدون کامپیوتر و تجهیزاتجانبی روی یک برد فسقلی اجراکنیم! و فراموش نمیکنیم که وقتی روی همین بردها اینترنت داریم دسترسیبه دنیایی از سرویسهای آنلاین داریم که استفادهاز اون تقریباً برای برنامهنویسهای الکترونیک با زبانی مثل C++ ممکننیست. با اینحال ضربه اصلی رو در قسمتبعدی خواهیمزد!
منبع: سیسوگ