گنوم، چندسال اخیر رو در حال بهبود تجربه کاربریش روی دستگاههایی مثل گوشیهای همراه و همچنین تبلتهاست. در کل، داره برای یک انقلاب در صفحات لمسی آماده میشه. حالا، یک رابط کاربری جالب به اسم Phosh (مخففی برای Phone Shell) ارائه کرده که روی دبیان (بله، حتی دسکتاپ!) قابل نصب و اجراست.
نماگرفت زیر، نماگرفتی از صفحه قفل این رابط کاربریه:
و خب همونطوری که میبینید، کار تمیز و نسبتا زیباییه. حالا سوال اینه چطور نصبش کنیم؟ در ادامه مطلب مفصلا توضیح میدم 🙂
نصب قدم به قدم Phosh روی دبیان
گام اول: نصب دبیان
توجه داشته باشید که دبیان مد نظر من اینجا، دبیانیه که شما روی پردازندههای x86 نصب میکنید. اگر قراره این دبیان روی رزبری پای باشه، یا سیستم شخصی شما صفحه لمسی داره، میتونید این قسمت رو نادیده بگیرید. اما من نصب رو روی یک ماشین مجازی با کمک Virtual Box انجام دادم. آموزش نصب دبیان، در اینترنت زیاد پیدا میشه؛ فلذا اینجا حرفی از آموزش نصب به میان نمیارم. فقط حواستون باشه نسخه Net Install دبیان رو دانلود و نصب کنید که چیز اضافهای نداشته باشیم. برای دانلود دبیان هم میتونید به وبسایت دبیان مراجعه کنید و آخرین ISO مورد نظر رو بگیرید.
گام دوم: قبل از نصب Phosh چه کنیم؟
خب اولین کاری که قبل از نصب Phosh کنید اینه که با خودتون یک فنجان قهوه یا نوشیدنی خنک داشته باشید چون پروسه نصب ممکنه شما رو خسته و تشنه کنه. بعد از اون، بد نیست که سیستم رو بروزرسانی کنید. بعد از بروزرسانی سیستمعامل، نوبتی هم باشه نوبت اینه که مستقیم بریم سر نصب Phosh. اینجا هم جا داره نکته مهم رو متذکر بشم که من phosh رو از مخازن نصب میکنم تا صرفا کنجکاوی رفع شده باشه وگرنه روش درستتر نصب phosh نصب از کد منبعه (حداقل اگر روی سیستم x86 و به قصد توسعه نصب میکنید).
گام سوم: نصب و راهاندازی Phosh
خب برای نصب کافیه که دستورات زیر رو اجرا کنیم:
sudo apt install phosh-core
و اگر میخواهید Phosh شما مناسب تبلت باشه:
sudo apt install phosh-tablet
و اگر میخواهید نسخه کامل Phosh رو نصب کنید، کافیه که دستور رو به این شکل تغییر بدید:
sudo apt install phosh-full
و بعد از نصب حدود یک گیگابایت بستههای نرمافزاری، کل میزکار گنوم مخصوص صفحات لمسی یا همون Phosh برای شما نصب خواهد شد. پس از نصب، کافیه که اول سرویسش رو فعال و سپس راهاندازی کنیم:
سپس، صفحه قفل (که بالاتر عکسش رو قرار دادم) و بعد از اون، صفحه ورود رمز به شما نمایش داده میشه.
پس از ورود رمز، وارد صفحه منوی اصلی میشیم که از اونجا میتونیم به نرمافزارها و ابزارهای نصب شده روی سیستم دسترسی داشته باشیم:
خب، حالا با خیال راحت میتونیم از Phosh استفاده کنیم و لذت ببریم 😁
نکات مهم
از اونجایی که Phosh نرمافزار نوپا و نسبتا جدیدیه، لازمه چند نکته مهم رو در موردش متذکر بشم:
نسخه خاصی ازش در مخازن دبیان پایدار موجوده که خب برای یک تست دم دستی و ویرچوالباکسی، بهترین گزینه بود (حداقل برای من) و خب قاعدتا روی مخازن تستینگ و ناپایدار هم قرارش دادند. موقع نصب، مراقب باشید تا به ضررتون نشه 😁 ترجیحا نصب رو روی یک ماشین مجازی انجام بدید.
این میزکار خاص، برای صفحات لمسی خیلی بهینه شده و استفاده ازش با ماوس و کیبرد تا حد زیادی سخته. اگر صفحه لمسی دارید که میتونید به سیستمتون وصلش کنید، احتمالا تجربه کاربری بهتری داشته باشید.
بعضی نرمافزارها اندازهشون برای من مشکل داشت (که احتمالا برمیگرده به ویرچوال باکس). اگر در جای دیگری امتحان بشه شاید اندازه صفحه و برنامهها، مناسب باشه.
کدوم توزیعها از Phosh پشتیبانی میکنند؟
این هم سوال مهمیه، تا جایی که دیدم PostmarketOS (که برمبنای آلپاین ساخته شده) و همچنین Mobian (که برپایه دبیانه) از این میزکار (یا بهتر بگم پوسته) پشتیبانی میکنند. در مورد سایر توزیعها/سیستمعاملهایی که ممکنه گنوم رو اجرا کنند، ایدهای ندارم.
جمعبندی
این بلاگ اصلا قرار نبود نوشته شه، ولی امروز از سر خستگی (دقیقا خستگی 😂) جستجو کردم ببینم Phosh چطور میتونه روی دبیان دسکتاپ نصب بشه. امتحانش کردم و به نظرم پروژه تمیز، باحال و آیندهداری اومد. حالا هم تستش کردم و هم یک سری ایده اومد به ذهنم. در آینده، احتمالا بیشتر با Phosh کار کنم و در موردش بنویسم. در آخر هم بابت وقتی که صرف کردید و این مطلب رو خوندید، ازتون تشکر میکنم.
پروزه جبیر ، پروژه ای نو پاست که هدف آن تهیه یک سیستم عامل مناسب برای آموزش لینوکس به کاربران است. پس از بحث با آقای حقیری موضوع مصاحبه و درج آن در سایت برای معرفی پروژه پیش آمد و قرار شد من سوالاتی که حدس می زنم یک کاربر ممکن است در مورد این سیستم عامل داشته باشد را بپرسم و ایشان جواب ها را فرستادند. در ادامه می توانید این مصاحبه را بخوانید.
خودتون رو برای دوستان معرفی کنید.
سلام . محمدرضا حقیری هستم متولد نهم خرداد ماه ۱۳۷۵ در شهر تهران و اکنون ساکن بندرعباس. در حال حاضر در دوره متوسطه مشغول تحصیل هستم. از جمله مقامات و رتبه هایی هم که کسب کردم ، میتونم به رتبه سوم رباتیک مدارس راهنمایی استان تهران ، رتبه دوم تولید محتوای آموزشی (نرم افزار) در استان تهران ، رتبه اول مسابقات گرافیک رایانه استان هرمزگان و رتبه ۶۴ المپیاد کامپیوتر کشوری. همچنین طرح سیستم عامل جبیر هم رتبه ۱۲ کشوری جشنواره جوان خوارزمی رو کسب کرده
از کی شروع به فعالیت کردید؟
از سال ۱۳۸۹ به فکر طراحی سیستم عامل بودم. البته اون زمان قصد داشتم همه چیز رو خودم بنویسم. ولی با Remastersys آشنایی پیدا کردم اما چون اینترنت پرسرعتی نداشتم ترجیح دادم توزیع لینوکسی رو روی ماشین مجازی پرورش بدم و ازش خروجی بگیرم (ویرچوال باکس چنین کاری رو میکنه) و بعد اسمش رو prp-e خالی گذاشتم. البته prp-e مخفف اسم کلوپ رباتیک مدرسه راهنماییمون بود (پرشیا رایان پرداز شرق). و در سال ۱۳۹۰ که همکار جدیدی در پروژه پیدا شده بود و تیم «ایران هکینتاش» رو تشکیل دادیم ، این توزیع رو پرورش دادیم و خروجی ISO رو با Remastersys تهیه کردیم. اواخر ۹۰ بود که IranHackintoshOS رو بین خودمون رد و بدل کردیم . کمی کار اون موقع سخت بود چون که دو نفر بودیم و اطلاعات لینوکسی متوسطی داشتیم. اما اینکه توزیعی رو ایجاد کرده بودیم که ویژگی هایی از سیستم عامل مک به ارث برده باشه. اما در نسخه ۱ که به «جبیر او اس» مشهور هست ، سعی کردیم یک توزیع همه جانبه تهیه کنیم .
هدف اصلی پروژه چیست؟
یک سیستم عامل عام منظوره که تمرکز خاصی رو دسکتاپ و کاربران تازه کار داشته باشه. یعنی کاربران بتونند بعد از نصب و کار روی این سیستم عامل بتونند به راحتی روی سایر سیستم عاملها(حتی مک یا ویندوز یا BSD ها و …) سوییچ کنند.
تیم دارید؟ چند نفر هستند؟
بله. تیم ۳ نفره متشکل از من (محمدرضا حقیری) ، رضا باقرزاده و محمد اسماعیلی.
الان در چه وضعیتی هستید؟
بستگی داره منظورت چی باشه . خب وقتی از «وضعیت» سوال به میون میاد کمی میشه گفت که وضعیت تیم ، که خدا رو شکر خوبه. وضعیت مالی و … هم در حد مطلوبی هست که بتونه یک Foundation کوچک رو زنده و سر پا نگه داره.
تا حالا چند تا نسخه منتشر کردین و تو هر کدوم جه پیشرفت هایی بوده؟
نسخه ۱ — ۲۵ فروردین ۹۱ — ویژگی خاصی نداشت.
نسخه ۲ — شهریور ۹۱ — میزکار Legendary UI رو در خود داشت.
نسخه ۳ — آبان ۹۱ — اولین توزیعی که به طور رسمی مبتنی بر گنوم ۳.۶ بود (قبل از Ubuntu GNOME Remix منتشر شد).
چرا جبیر رو با میزکار های مختلف منتشر می کنید و روی یه میزکار تمرکز نمی کنید؟
برای اینکه دوست داریم همه ازش استفاده کنند. مثلا شما توزیعی مثل چاکرا رو ببینید ، حتی الان فقط به ۶۴ بیت محدود شده! این در صورتی هست که جبیر فقط در ۳۲ بیت منتشر میشه و امکان اجرا روی همه سیستم ها رو داره.
چرا یه میزکار برای جبیر نمی سازید و از گنوم شل و xfce و بقیه میزکار ها استفاده می کنید؟
چون توسعه میزکار سخت و هزینه بر و همچنین کار بر هست. مثلا KDE از سال تولد من (۱۹۹۶) متولد شده و الان ۱۷ سال هست که داره توسعه داده میشه
خیلی از منتقدان شما ازتون این سوال رو می پرسند که چرا روی یه توزیع مثل اوبونتو کار نمی کنید و یه سیستم عامل جدید ساختین. جواب شما به این دوستان چیه؟
خب این رو از حرفهای قبلی من میشه برداشت کرد. برای اینکه این توزیع نمونه ای هست که کل کامپیوتر -علی الخصوص لینوکس و یونیکس – رو به کاربر آموزش میده .
نظرتون در مورد توزیع های ایرانی مثل آریویس چیه؟
همه توزیع های ایرانی خوب هستند. مخصوصا پارسیکس ، آریوس و زمین. البته پارسیکس و پارسیدورا تقریبا میشه گفت که روند توسعشون خیلی کند هست (مطلبی در وبلاگم هست در موردشون). ولی آریوس که تقریبا همزمان با مینت و زمین هم که توزیع نسبتا مستقل هست خوب و کارامد هستند. گفتم کارامد! راستی کارامد لینوکس هم خوب بود. با این اوصاف هزاران سیستم عامل ایرانی قبل از «قاصدک» بودند ولی نمیدونم چرا عنوان «اولین سیستم عامل ایرانی» رو به خودشون نسبت دادن )
چرا کاربر باید اوبونتو یا دیگر توزیع های لینوکس رو رها کنه و بیاد سمت جبیر؟
فکر کنم به اندازه کافی روی این مورد در بالا توضیح دادم
چه چیز جدیدی رو تصمیم دارید توی جبیر پیاده سازی کنید یا که پیاده سازی کردید , تا منحصر به فرد بشه؟
اول از همه لجندری یو آی ، بعد از اون پروژه های EasyShell و JetGet که اولی یک شل یونیکس و دومی یک رابط متنی برای همه مدیر بسته های یونیکس و لینوکس هست. تا الان Legendary UI پیاده سازی شده.
در مورد بهینه سازی سیستم عامل برای صفحه های لمسی چه کار هایی انجام شده یا انجام خواهد شد؟
Legendary UI گام اول بود تا فضای خالی زیادی رو دسکتاپ ایجاد بشه. بعد از اون روی Plasma Active که شرکت Basyscom و KDE مشترکا منتشرش کردند رو انتخاب کردیم.
فکر نمی کنید جبیر کمی نیاز به تبلیغ داره تا بین کاربران شناخته بشه؟به نظر میرسه آریوس تو این زمینه بهتر از شما نیست؟
خب آریوس قدیمی تر هست. همچنین در دایرکتوری دیستروواچ موجوده. توزیع های نوپا ابتدا کمی با مقاومت جوامع ، بعد از مدتی کم توجهی و در نهایت توجه آنها مواجه میشند. حتی اگر در فرومهای اوپن سوزه و اوبونتو بچرخید متوجه خواهید شد همه جا همینه.
اگه نکته یا حرفی با خوانندگان دارید بگید.
نکته یا حرف خاصی ندارم با تشکر آرزوی توفیق روز افزون برای همه
حدود بهمن یا اسفند سال ۱۳۹۹ بود که من، یک عدد رزبری پای ۴ مدل B (لینک) خریداری کردم که باهاش یه سری ایده رو عملی کنم. از وقتی که این دستگاه رو خریدم، مدت زیادی تقریبا گذشته اما خب چند هفته اخیر، شدیدا با این دستگاه در حال کشتی گرفتن و تست ایدههای مختلف هستم. یکی از ایدههای من پروژهای بود که تا حد زیادی به هوش مصنوعی (و بخصوص tensorflow) نیازمند بود. مشکلی که داشتم این بود که در خود مخازن PyPi ای که روی رزبری پای در دسترسه، هیچ ساخت درستی از tensorflow وجود نداره.
اما خب، نمیشه در دنیای تِک ناامید شد؛ به همین خاطر دنبال راهکار و راه حلی گشتم که بتونم تنسرفلو رو روی رزبری پای داشته باشم. یکم سختتر از حالت عادی (که استفاده از pip بود) شد اما ارزشش رو داشت. چون تونستم بدون مشکل مدلی که مدنظر داشتم رو لود و استفاده کنم. همچنین لازمه ذکر کنم که در این مطلب قراره یاد بگیریم چطور خود تنسرفلو رو نصب کنیم و به TFLite کاری نداریم.
رزبری پای چیه؟
رزبری پای (Raspberry Pi) یک کامپیوتر تکبرد (SBC یا Single Board Computet) محسوب میشه که توسط یک بنیاد غیرانتفاعی به همین اسم در بریتانیا طراحی شده (البته تولیدش مثل عمده محصولات دیگر، در کشور چین انجام میشه). این بردها معمولا یک پردازنده ARM دارند و میشه روی اونها سیستمعامل نصب کرد. خیلیهاشون هم ورودی/خروجی عاممنظوره (General Purpose Input/Output) یا همون GPIO دارند که میتونن رابطی بین این کامپیوتر و قطعات الکترونیکی دیگر باشند.
این کامپیوترهای کوچک – که در ابعاد یک کارت اعتباری ساخته شدند – اسباببازی خوبی برای برنامهنویسان و مهندسین کامپیوتر به شمار میان. بسیاری از متخصصین و علاقمندان از رزبری پای استفاده میکنن تا ایدهها و پروژههاشون رو پیادهسازی کنن. البته لازم به ذکره که خیلیها هم حتی محصولاتشون رو برپایه رزبریپای توسعه دادند (پس اگر دوست داشتید یکی تهیه کنید و باهاش بازی کنید، درنگ نکنید 😁)
تنسرفلو چیه؟
از اونجایی که این مطلب، در مورد نصب Tensorflow روی رزبری پای بود، لازمه که کمی هم در مورد تنسرفلو توضیح داده بشه. تنسرفلو یک کتابخونه نرمافزاری آزاد و متنبازه که توسط تیم Google Brain توسعه داده میشه. این کتابخونه، به ما اجازه میده که پروژهها و پروسههای یادگیری ماشین، هوش مصنوعی، یادگیری عمیق، استنباط آماری و … تا توسعه شبکههای عصبی مصنوعی رو انجام بدیم. به خاطر پشتیبانی گوگل از این کتابخونه، به یکی از محبوبترین و پراستفادهترین کتابخونههای هوش مصنوعی تبدیل شده (مثلا در پروژه خودران، من از این کتابخونه استفاده کرده بودم).
اما یک مشکل بزرگی با نصب تنسرفلو روی رزبری پای مواجه هستیم. مشکل اینجاست که وقتی دستور روتین pip برای نصب تنسرفلو رو بزنیم، اتفاق خیلی خاصی رخ نمیده، جز این که یک ارور مبنی بر پیدا نشدن این کتابخونه در مخازن PyPi متعلق به پلتفرم ما نشون داده میشه. پس باید چی کار کنیم؟ خب در ادامه قراره که همین داستان رو بررسی کنیم و به نتیجه درستی برسیم.
نصب Tensorflow روی Raspberry Pi
قبل از هرچیزی باید بگم که من این پروسه رو روی Raspberry Pi 4 Model B (با رم ۲ گیگابایت) و سیستم عامل Raspberry Pi OS نسخه Bullseye (بله درست حدس زدید، سیستمعامل رزبری پای دبیانه 😁 و صدالبته که میتونید توزیعهای دیگری هم روش نصب کنید) و ویرایش ۶۴ بیتی طی کردم. بسته به مدل رزبری شما و سیستمعاملتون، این پروسه میتونه متفاوت باشه.
نصب نرمافزارهای پایه
ما برای این که بتونیم تنسرفلو رو نصب کنیم، نیاز به نصب تعداد زیادی نرمافزار روی خود سیستمعامل داریم. به نظر بهتره که ابتدا، لیست بستههای مخازن رو بروزرسانی کنیم:
sudo apt update
و صدالبته بهتره که خود سیستمعامل هم بروزرسانیهای آخرش رو دریافت و نصب کنه:
sudo apt full-upgrade
پس از این که این مراحل انجام شد، تعداد زیادی نرمافزار رو به این شکل نصب میکنیم:
عمده این نرمافزارها رو بر اساس پیامهای خطایی که دریافت میکردم پیدا کردم، چرا که وقتی شما روی سیستم دسکتاپ یا لپتاپ خودتون تنسرفلو نصب میکنید، بسیاری از اینها (متناسب با معماری پردازنده) پیشتر نصب شدند اما سیستمعاملهایی که روی رزبری نصب میکنیم چنین حالتی ندارند. بهرحال، همه نرمافزارهای پایهای که نیازه از مخزن دبیان نصب بشه، در این دستور موجوده (طبیعتا اگر نیاز به بسته دیگری باشه بعدا این مطلب ویرایش میشه)
نصب و بروزرسانی بسته های پایتونی
خب ما تعدادی پیشنیاز پایتونی هم داریم (که اینها رو اکثرا حتی در وبسایت تنسرفلو هم میشه پیدا کرد) که با دستورات زیر نصبشون میکنیم:
توجه کنید که اگر این دستور کار نکرد هم جای نگرانی نیست، میتونید این لینک رو باز کنید و فایل رو خودتون دانلود کنید.
سپس کافیه که با اجرای این دستور:
pip3 install <TENSORFLOW WHL FILE>.whl
نصب رو انجام بدید.
ضمنا، از اونجایی که ممکنه بعدتر نسخهها تغییر کنن، بهتره که این صفحه رو هم هر چند وقت یه بار چک کنید تا اگر نیاز بود نسخه تنسرفلو رو تغییر بدید، فایل مربوطه رو دانلود کنید.
جمعبندی
مدتهای زیادی میشه که دوست دارم در مورد پروژههایی که در حوزه «اینترنت چیزها» یا همون IoT انجام میدم هم بنویسم. اما متاسفانه پروژههای سختافزاری، وقت زیادی از آدم میگیرن و وقتی وقت آزاد زیادی نداشته باشید، معمولا به پروژههای سختافزاریتون هم آنچنان نمیتونید رسیدگی کنید. به همین خاطر مدتی میشه که در تلاشم تا پروژههای شخصی و صدالبته کاریم در حوزه بینایی ماشین رو با IoT ترکیب کنم و به این شکل این حوزه رو هم وارد کارهای روتین و اصلیم کنم که وقت هم همیشه براشون باشه 😁
تست چند پروژه بینایی ماشین روی Raspberry Pi شروعی برای این دوران از زندگی منه. راستی، اگر دوست دارید نقشه راه بینایی ماشین رو داشته باشید میتونید بیایید اینجا، اگر دنبال ایده برای پروژهها هستید هم اینجا رو بخونید. حتی میتونید به ما در جامعه بینایی ماشین هم ملحق بشید و اشتراک تجربه و دانش کنید.
در دو پست قبلی (+، +) در مورد پروژه جبیر با شما صحبت کردم و توضیح دادم که ایدهش از کجا اومد و چی شد و چه کردیم. قسمت دوم یکم پرش قلم من زیاد بود چون موضوعات زیادی رو شامل میشد اما خب نیاز بود که گفته بشه. حالا رسیدیم به قسمت آخر. در این قسمت، میخوام از این بگم که در جشنواره خوارزمی چه گذشت و چرا جشنواره خوارزمی شروعی بود بر پایان این پروژه.
بذارید قبل از هرچیزی، یک مرور کلی داشته باشیم بر دو قسمت قبلی. در قسمت اول، توضیح دادم که من شیفته اپل شده بودم و میخواستم مثل استیو جابز، یک شخصیت مهم در دنیای تکنولوژی باشم و همون قدر شناخته بشم و همونقدر هم ثروتمند (بالاخره آرزو بر نوجوانان عیب نیست، هست؟) و تصمیمم این شد که یک سیستم عامل بسازم و بعد از کلی تحقیق و توسعه؛ نتیجه این شد که یک سیستم عامل مبتنی بر گنو/لینوکس و توزیع اوبونتو بسازم. اسم این پروژه هم گذاشتیم جبیر.
در قسمت دوم، از فراز و نشیبهای فنی این قضیه گفتم. از این گفتم که چی شد که اینطوری شد و چی شد که ساخته شد. بذارید سادهتر و مفصلتر بگم، اول گفتم که فاز تحقیقم چی بود و چه کردم و چه چیزایی خوندم. بعد گفتم که چرا تصمیم گرفتم بیام سراغ سیستمعاملهای متنباز موجود مثل لینوکس یا BSD و در نهایت گفتم چرا لینوکس رو انتخاب کردم. بعدش از عادت Distro Hopping گفتم (این عادت یعنی که شما بیایید و توزیعهای مختلفی تست کنید و همیشه روی یک توزیع ثابت نمونید) بعدش هم گفتم چی شد که مینت و اوبونتو رو به عنوان مبنا در نظر گرفتم و چطور نسخههای اولیه جبیر ساخته شد.
بعد از اون، از انتشار جبیر و اشتباهاتی که در ساخت این پروژه شد نوشتم. بعد از این موضوع، وارد بحث نسخه ۴ که نسخه جنجالی جبیر بود شدیم (نسخهای که به اینترنت متصل نمیشد، به همراه نظر جادی و تبعاتش) و بعد از اون چه شد که به سراغ BSD رفتیم و همین موضوع هم مزید بر علت شد که جبیر روز به روز به پایان خودش، نزدیکتر بشه.
جشنواره خوارزمی
جشنواره خوارزمی، یک جشنوارهست که در سطوح مختلف (چه مقطع تحصیلی و چه تقسیمات جغرافیایی) برگزار میشه و یکی از اهدافش، اینه که به مخترعین و مبدعین و محققین جوان کمک کنه تا نتایج کارهاشون دیده بشه. مقام آوردن در این جشنواره، خودش یک سری امتیاز خاص به همراه داره که این امتیازات عبارتند از دانشگاه بدون کنکور رفتن (طبیعتا در رشتهای که پروژه/اختراع ارائه کنید) و معافیت سربازی و اینها. البته اینها مال اون زمان بود و الان نمیدونم چطور شده ولی فکر نمیکنم تغییری کرده باشه.
احتمالا اگر الان این رو خوندید و دبیرستانی هستید، براتون خیلی دغدغه شده که حتما در این جشنوارهها شرکت کنید، ولی خواهش میکنم که قبلش حتما مطلبی که اول این پست لینک شده رو یه نگاه بندازید. قدیمیه ولی ارزشش رو داره. خلاصه بگذریم؛ چیزی که اینجا مهمه اینه که شما بدونید اگر طرحتون به زعم داوران جشنواره واقعا خوب بیاد، امتیازاتی دریافت میکنید که میتونه شما رو به اهداف زندگیتون نزدیک کنه.
حقیقتا من از وقتی بچهتر بودم، بچههایی که به این جشنواره راه پیدا میکردند رو از تلویزیون و روزنامه و … دنبال میکردم، دلم میخواست روزی مثل اونها باشم. مادامی که در تهران در مقطع راهنمایی تحصیل میکردم خبری از این جشنواره برای دانشآموزان راهنمایی نبود (سالی که ما شرکت کردیم ولی بود) و همین امر، باعث شده بود که من با این تیپ جشنوارهها غریبه باشم. اما در دبیرستان اوضاع فرق کرد. ما این پروژه رو شروع کرده بودیم. بخصوص سال دوم دبیرستان که بودم، رضا باقرزاده عزیز هم به من پیوست و با هم پروژه جبیر رو پیش میبردیم.
یک روز، ما از مدیر مدرسهمون خواستیم که سالن اجتماعات مدرسه رو در اختیارمون بذاره و از بچههایی که اون ساعت خاص، بیکارن دعوت کنه که بیان و پروژه ما رو ببینن. این هم خودش یکی از حرکات «استیو جابز»گونه بود 🙂 خلاصه این اتفاق افتاد و از قضا، مدیر مدرسه هم خودش اومد در اون جلسه دورهمی حضور پیدا کرد. این قضیه برای ما خیلی خوب بود چرا که حسابی در چشم مدیر مدرسه، درخشیده بودیم.
اما این تمام ماجرا نبود …
روز بعد اون کنفرانس، مدیر مدرسه از من و رضا درخواست کرد که جزییات پروژه رو براش بنویسیم. من هم یک صفحه A4 نوشتم تحویلش دادم. یک هفته بعد، ما رو از سر کلاس (که اگر اشتباه نکنم دینی بود) خواستند به دفتر. ما اول کمی ترسیده بودیم (بهرحال سیستم آموزشی ما ایجاب میکنه که از دفتر بترسیم 😂) و وقتی رفتیم، دیدیم یک آقای میانسالی هم اونجا هستند. مدیر مدرسه به ما گفت که ایشون از مسولین آموزش و پرورش استان هرمزگانن و پروژه ما در مرحله استانی خوارزمی پذیرفته شده.
ایشون گفت که روز بعدش، بریم پیشش. پرسیدیم بعد مدرسه؟ گفت نه، از مدیرتون اجازه بگیرید و دو زنگی رو ما در خدمتتون هستیم. ما هم از این بابت خوشحال شدیم. میدونید چرا؟ چون بالاخره دو زنگ پیچوندن هم خودش صفای خودش رو داشت. حالا از این حال و هوا بیاییم بیرون. ما فرداش رفتیم پیش ایشون. ایشون ما رو برد پیش مسولین خوارزمی و کلی تحویلمون گرفتند. این تحویلگیریها البته دلیل داشت! دو سه سالی بود که از استان هرمزگان در رشته کامپیوتر هیچ پروژهای معرفی نشده بود و اینها هم از این موضوع حسابی خوشحال بودند.
خلاصه که این دوستان، به ما گفتند یک A4 کافی نیست و در قالب یک پرپوزال باید در مورد پروژه بنویسیم. من و رضا هم گفتیم پس ما میریم روی این کار میکنیم و میآییم پیش شما. اون خانمی که در آموزش پرورش به ما گفت که بعدا بریم پیشش، گفت که چهارشنبه ها عصر هم حضور داره در همون دفتر و نیازی نیست کلاس رو بخاطر قرار با ایشون بپیچونیم. خلاصه کلام که ما رفتیم و یک فایل ۲۰-۳۰ صفحهای با عنوان «سیستمعامل جبیر» نوشتیم و این رو پرینت کردیم و در طلق و شیرازه قرار دادیم و چهارشنبه بردیم پیش ایشون.
بعد از کمی بررسی، غلطهای این پرپوزال رو به ما گفت و ما اون رو اصلاح کردیم. بعدش به ما گفتند که تا تیرماه حدودا صبر کنیم (و این ماجرا حدودای فروردین اتفاق افتاد اگر درست یادم باشه). ما هم به درس و مشقمون رسیدیم و امتحان دادیم. اما خب اینجا یک سری اتفاق خاص هم افتاد.اتفاقاتی که به نوبه خودشون جذاب و جالب بودند.
جشنواره خوارزمی استانی
جشنواره استانی، برخلاف کشوری، اینطوری نیست که شما بری از پروژه دفاع کنی. بر اساس همون توضیحاتی که از پروژهها ارائه شده، داوری میکنند و اونایی که حس میشه شانس خوبی برای مقام کشوری آوردن دارند انتخاب میشن. بعد از این، این مورد به صاحبان ایده و پروژه، ابلاغ میشه.
در همین حین، ما که سخت مشغول کار روی جبیر بودیم و حتی یادمه که دونفری با رضا میرفتیم پیش خدمات کامپیوتریها که مجابشون کنیم که یکی دو تا سیستم بدن دست ما که روش جبیر نصب کنیم (شاید باورتون نشه ولی یکی از پلنهای من، برای هر توزیعی که درش نقشی داشتم تولید کامپیوترهای رومیزی با همون سیستمعامل هم بوده) و معمولا اونها هم یه چراغ سبز الکی نشون میدادن، یک باره به تلفن رضا زنگ زدند. رضا گفت «آقای …؟» و بعد گوشی رو روی اسپیکر گذاشت و به ما اعلام شد که در استانی، رتبه اول شدیم (لینک خبر).
در مورد تاریخ خبر باید به شما بگم که این اخبار، بعد از برگزاری جشنواره کار شدند. یعنی ما تیر ماه خبر داشتیم از این که در استانی پذیرفته شدیم ولی ظاهرا قوانینی که روی جشنواره حاکمه، ایجاب میکرد که تا زمان شروع جشنواره سال بعد خبری ازش کار نشه. خلاصه بگذریم. ما دو تا هم خوشحال و سرخوش گفتیم که فرداش میریم آموزش پرورش.
در آموزش و پرورش، بیش از گذشته تحویلمون گرفتند! این بار به ما گفتند که نیازه تا فیلمی بگیریم که هردو توش باشیم (البته ما دو فیلم مجزا گرفتیم. چرا که رضا بیشتر روی جنبه UI و ظاهری قضیه کار میکرد و من روی بیس سیستم) و بعد یک پرپوزال دیگر بنویسیم که یک سری ملاحظات خاص رو درش رعایت کرده باشیم. این ملاحظات شامل نحوه فهرستبندی، استفاده از فونت و … بودند. خلاصه ما دوتا CD و یک کتابچه تحویل دادیم و بعدش مدت نسبتا طولانی، از هم دور شدیم.
جشنواره خوارزمی کشوری
مرداد ماه بود و من به همراه مادرم چند روزی (فکر کنم دو هفته!) آمدیم تهران. در همین روزها، یادمه که رضا به من زنگ زد. بهش گفتم چه خبر؟ چه کارا میکنی؟ و خیلی عادی حرف زد. برای من این موضوع خیلی جالب بود که چطور تونسته بود اونقدر خونسرد باشه و یهو من رو غافلگیر کنه :)) پای تلفن به من گفت که «فلانی زنگ زد و گفت که اوایل شهریور باید تهران باشیم که از پروژه دفاع کنیم.
خلاصه بعد برگشت من به بندر، قرار شد با رضا بریم و در مورد این پروسه بپرسیم. به ما گفتند که داورا اینطورین و باید چه کنید و … (که با تقریب خوبی البته درست نبود) و به ما پولی دادند که بلیت هواپیما تهیه کنیم و با هواپیما بریم تهران. همچنین بودجهای به ما دادند که لباسهای متحدالشکل تهیه کنیم و ما هم دوتا پیراهن گرفتیم که لعنت خدا هم گرونش بود، ولی سال ۹۱ بابت هر پیراهن ۶۰ هزار تومان پول دادیم 😂.
خلاصه ۵ شهریور ۹۱ شد. ما رفتیم فرودگاه بندرعباس و سوار یک عدد ایرباس A300 هواپیمایی ماهان شدیم و به سمت فرودگاه مهرآباد تهران پرواز کردیم. در تهران هم مسول آموزش و پرورش هرمزگان (همون آقای میانسالی که کارهای ما رو انجام داده بود) آمد و ما رو به خوابگاه دانشجویی دانشگاه تربیت دبیری شهید رجایی برد. حقیقتا تا حد خوبی حالمون گرفته شد، چرا که به ما گفته شده بود برای ما هتل رزرو شده و از این دست چرت و پرتا. ولی خب ایرادی نداشت، فرداش روز بزرگی بود.
فرداش رفتیم. ظهر شد و دعوت شدیم که بریم داخل اتاق. داخل اتاق، سهتا آقا نشسته بودند که علیالظاهر، اساتید کامپیوتر همون دانشگاه بودند (اینجا این رو بگم که بعدا روش بحث صورت بگیره، اگر جشنواره خوارزمی یک جشنواره کشوریه، آیا بهتر نیست که فراخوانی زده شه و از اساتید و صاحبنظران کل کشور خواسته شه که داوطلب بشن؟ چرا فقط یک دانشگاه خاص؟) و یک سری سوال پرسیدند. ما وقتی داشتیم صحبت میکردیم و …؛ من اشاره کردم که جبیر مبتنی بر گنو/لینوکس ساخته شده. یادمه یکی اونجا خندید و گفت «پس مثل همون لینوکس فارسیهست…».
حالا شما خودتون حساب کنید که این که این دوستان زده بودند تو کانال مسخرهبازی، چقدر به ما فشار آورد. خلاصه ما ارائه و دفاعمون رو تحویل دادیم و آمدیم بیرون. ناهاری بر بدن زدیم و کمی تهرانگردی کردیم و بعدش هم رفتیم سمت فرودگاه. دقیقا یادمه بعد از این که مسول آموزش پرورش ما رو ترک کرد، ما کاری نداشتیم که انجام بدیم پس با رضا نشستیم به خوندن آموزش Bash و اسکریپتنویسی 😁
خلاصه به سمت بندرعباس برگشتیم و بعد از اعلام نتایج، فهمیدیم که رتبه قابل قبولی در این جشنواره کسب نکردیم. این خودش یک شکست بسیار بسیار بزرگ برای ما محسوب میشد. گرچه کادر مدرسه تاکید داشتند سال بعدش هم شرکت کنیم ولی حقیقتا ما سال بعد تصمیم داشتیم دیگه شرکت نکنیم و همین هم شد. این دقیقا اینجا به این معنا بود که پروژه هم داره تا حد خوبی به آخرای خودش نزدیک میشه.
رفتن روی BSD، بزرگترین اشتباه
هنوز که هنوزه، من سیستمعامل FreeBSD رو به شدت دوست دارم و محاله وقتی نسخه جدید میده، نصبش نکنم و باهاش کمی بازی نکنم. اما حقیقت امر این بود که BSD ها – به جز مک – واقعا برای استفاده دسکتاپ و روزمره مناسب نیستند. حتی روی سرور و روتر و … (که BSDها حرفهای به شدت زیادی برای گفتن دارند) هم معمولا انتخاب خوب و اول نمیتونن باشند.
یکی از مهمترین دلایل، اینه که BSDها معمولا ساپورت سختافزاریشون اونقدری که باید و شاید، خوب نیست. دلیل دیگری که به ذهنم میرسه اینه که استفاده از BSDها به شدت محدوده و بین هزاران شرکت و استارتاپی که مبتنی بر لینوکس هستند، شاید فقط Netflix, WhatsApp و Sony باشند که از FreeBSD (یا نسخههای دیگر BSDها) استفاده کنند. همین امر، باعث شده که BSDها مستندات کمتر و جوامع کوچکتری داشته باشند.
و البته اشتباه دیگری که داشتم این بود که فکر میکردم اگر برم روی BSD و یه بخش خوبی از رابط کاربری هم خودم بسازم (که تاحدی این کار رو کرده بودم) و مجوز اون هم BSD قرار بدم، شاید بتونم کد رو ببندم. اما هیچ کس نبود بهم این نکته رو گوشزد کنه که بستن کد برای پروژهای که تیم کوچکی داره و ساپورت مالی نمیشه و سرمایهگذار خاصی هم نداره، سم مطلقه.
خلاصه با پیادهسازی نه چندان بد، تفکرات اشتباه و صد البته واکنشهای عجیب و غریب جوامع نرمافزار آزاد و متنباز ایران، این پروژه باز بیشتر و بیشتر روی سراشیب سقوط قرار گرفت. اما حقیقت امر اینه که یکی از بزرگترین تیرهای خلاص این قضیه رو، همین جامعه نرمافزار آزاد به این پروژه وارد کرد.
واکنشهای جامعه نرمافزار آزاد ایران و پیامدهایش
من اصلا دوست ندارم در نقش قربانی فرو برم و شکستها و عدم موفقیتم رو گردن کسی بندازم. حقیقتا از این رفتار به شدت بدم میاد و اگر ببینم کسی چنین رفتاری داره خیلی سریع، از دایره دوستی و حتی آشنایی من ممکنه حذف بشه. پس امیدوارم این بند خاص از مطلب من، این حس رو القاء نکنه که در نقش قربانی فرو رفتم.
بگذریم، جامعه نرمافزار آزاد ایران، که در حال حاضر عمدتا حول اوبونتو و در فروم اوبونتو متمرکز شده تقریبا (و این تمرکز هم خودش سم مهلکیه) رفتارهای عجیب و جالبی دارند. این جامعه عموما اینطوری بود که خیلی سخت افرادی که بیرون گود بودند رو میپذیرفت و خیلی وقتها هم نمیتونستند یک سری موضوعات خاص رو بپذیرند. به همین دلیل، رفتارها بیشتر شبیه گنگسترها و یاکوزاها میشد. حقیقتا در مقابل پروژه جبیر هم تا حد زیادی به این شکل برخورد نشان دادند.
برخوردهایی از این دست که «چرا به فلان پروژه کمک نمیکنی؟» اصلا از نظرم بد نیست. خیلی هم خوبه و خیلی راحت میتونه شما رو مجاب کنه که نیاز نیست چرخ رو از اول اختراع کنید. اما خب، گاهی برخوردها سمت ترولینگ و قلدری سایبری پیش میرفت. مثلا شخصی میومد میگفت «بیا کرنل رو بکن داروین» و بعد چند نفر ادامه میدادند. نکته جالب هم این که از سادگی من هم به عنوان یک نوجوان، تا حد خوبی بهرهکشی شده بود اینجا. من الان دانشی دارم که بهم میگه که تعویض کرنل بسیار سخته، و در بعضی موارد کاملا ناممکن. اما اون موقع من چنین آگاهیای نداشتم.
خلاصه بگم که کم کم به جایی رسید که من دیگه میفهمیدم کجاها ملت دارند دستم میندازن. حقیقتا خوشم اومده بود که خودم همراه شم با این قضیه و تا میتونم چرت و پرت ببافم. اما خب حقیقتا این به ضرر من شد چرا بعدتر، برچسب ترول به من چسبید و از جامعه کاملا پاک شد. جامعهای که تقریبا همیشه نشون داده با افراد جدید – صرفنظر از این که آدمهای خوبین یا بد – چنین برخوردی رو داشته و خب این برخوردها، نتایج خوبی هم نداشته. برای مثال، خود من از سال ۹۳ تا ۹۶ واقعا در این جامعه هیچ حضور فعالی نداشتم و ۹۶ دوباره برگشتم بهش. سال ۹۹ هم موارد مشابهی پیش آمد و دلخوریهایی ساخته شد.
خلاصه بگذریم از این موضوع، میخواستم صرفا این موضوع رو شفاف کنم که جامعه، از دور ممکنه قشنگ به نظر برسه اما خب درونش نیازمند سازگاری بالا و همرنگ جماعت شدنه. حقیقتا من هم شخصی نیستم که بخوام همرنگ جماعت باشم، به همین خاطر ممکنه در جوامع مختلف، متضرر بشم 😁
سخن آخر
اول از همه از شما ممنونم که این مطلب رو خوندید و تا اینجا اومدید. دوم، میخوام ازتون دعوت کنم که علاوه بر این وبلاگ، ویرگول هم میتونید مطالب من رو بخونید ولی در ویرگول معمولا انقدر حرافی نمیکنم 🙂 و در نهایت، میخوام یک جمعبندی کلی روی این سه قسمت بکنم و بگم که به پایان آمد این دفتر، حکایت همچنان باقیست.
حقیقتا بعد از شکست پروژه جبیر، من یک درس بزرگ گرفتم. درسی که بهم گفت «نیاز نیست استیو جابز دوم باشی، تو خود خودت باش» و این درس به نظرم بزرگترین نکته شخصیتی بود که میتونستم از انجام چنین پروژهای دریافت کنم. درس و نکته بعدی هم این بود که حرفهای اطرافیان میتونه به شدت روی روان آدم تاثیر بذاره و نباید گذاشت این حرفها، از ما یک موجود کینهای بسازه که بعدتر نیازمند انتقامگیری و پروندهسازی و فلان باشه. درسهای شخصیتی و روانی این پروژه، واقعا برای من مهم و ارزنده بودند.
از نظر فنی هم، درسهای خوبی گرفتم. برای مثال اندازه افرادی که LPIC 1, 2 میگذرونند از لینوکس یاد گرفتم. تا حد خوبی پایتون یاد گرفتم. حتی همین امر باعث شد که بعدتر، روبی یاد بگیرم و … . همچنین یاد گرفتم که نیاز نیست برای متفاوت بودن حتما به سمت BSD رفت بلکه یک رابط کاربری متفاوت هم میتونه به خودی خود، تا حد خوبی تاثیر مثبت روی ذهن افراد داشته باشه.
از منظر بیزنسی هم بخواهیم نگاه کنیم یک درس خیلی خوب گرفتم. اون این که «وقتی تیم کوچیکه یا پروژه تکنفره جلو میره نیازی نیست که کد، بسته باشه. اتفاقا باز بودن کد به نفع توئه». و همین باعث شد از اون به بعد عمده پروژههای من روی گیتهابم قرار بگیرند.
خلاصه که یک پروژه شکستخورده، میتونه پر از درس برای ما باشه. مهم اینه که ما بخواهیم همیشه در سوگ بمونیم؟ یا این که به قدری سوگواری کنیم و بعد از اون سوگواری به سمت انجام یک پروژه جدیدتر قدم برداریم. نمیدونم فیلم Whiplash رو دیدید یا نه، اما در صحنهای یکی از شخصیتها میگه «چارلی پارکر وقتی با اون صحنه مواجه شد، اول سوگواری کرد. بعد یک روز کامل استراحت کرد و بعدش اونقدر تمرین کرد که ما امروز ازش حرف بزنیم». پس باید گفت که این ماییم که انتخاب میکنیم چارلی پارکر باشیم، یا اون نوازندهای که با یک شکست، کلا ساز و نوازندگی رو میذاره کنار.
در پایان، مجددا از شما بابت وقتی که برای خوندن این مطلب گذاشتید تشکر میکنم. همچنین امیدوارم که این تجربه شکست طولانی، تونسته باشه برای شما جرقه یا کمکی باشه در هندل کردن پروژههاتون یا حداقل بهتون کمک کرده باشه که چطور با پروژههای شکست خورده کنار بیایید. امیدوارم که در آینده نزدیک، بتونم با مطالب بیشتری در خدمت شما باشم.
در مطلب پیشین (لینک) اشاره کردم که ایدهها و جرقههای ابتدایی پروژه جبیر، از کجا به ذهنم رسید و چرا مهم بود که اون ایده رو پیاده کنم و حتما به اون هدف برسم. این موضوع، باعث شد که من بیش از پیش تلاش کنم که به هدفی که برای خودم گذاشتم برسم.
در این یکی مطلب، قصدم اینه که در مورد فرایندی که جبیر برای ساخته شدن طی کرد صحبت کنم و قطع به یقین، خیلی از این مراحل قدیمیتر از اونی هستند که شما بتونید الان پیادهسازیشون کنید. پس اگر نیازمند این هستید که توزیع لینوکسی مبتنی بر دبیان یا اوبونتو بسازید، میتونید راهنمای عملی قرار دادن فیل در یخچال و همچنین چگونگی ساخت توزیع لینوکس رو بخونید. ولی اگر دوست دارید سفر طولانی یک نوجوان در مسیر پیادهسازی رویاش رو بدونید، به خوندن همین مطلب ادامه بدید.
بررسی راههای ساخت یک سیستمعامل
ابتدای راه، باید بررسی میکردم که سایرین چطور سیستمعامل ساختند و چطور شده که سیستمهای عاملشون، رشد و نمو خوبی داشته. همونطور که در قسمت اول هم اشاره کردم، یکی از idol های من در زندگی، استیو جابز بود (و کماکان هم هست) و طبیعتا اولین سیستمعاملی که به نظرم اومد که داستان موفقیتش رو مطالعه کنم، مک بود. اما مک یک مشکل بزرگ داشت. بررسی درست و حسابیش نیازمند این بود که حتما یک سیستم اپل تهیه کنم. حالا چه آیمک، چه مکبوک و … . به همین خاطر، مک رو بیخیال شدم.
داستان موفقیت ویندوز هم تقریبا اظهر من الشمسه. این سیستمعامل عمده محبوبیتش رو به این خاطر داره که روی سیستمهای سازگار با PC های IBM نصب میشد و از قضا، همون دوره IBM تصمیم گرفته بود که لایسنس تولید کامپیوترهای شخصی مشابه کامپیوترهای خودش رو به کمپانیهای دیگری مثل Dell, Compaq, HP و … هم بفروشه. پس تعداد بیشتر، مصادف شده بود با مصرف بیشتر و محبوبیت بیشتر.
نهایتا، با خودم گفتم که «خب، میرم بین محبوبیت توزیعهای لینوکس جستجو میکنم». اونجا بود که فهمیدم چندین توزیع ایرانی مثل پارسیکس (متوقف شده)، کارآمد (متوقف شده) و آریوس (متوقف شده) وجود دارند. در عین حال، فهمیدم اینها ویژگیهای مشترک زیادی دارند. خلاصه که این مورد رو گذاشتم در لیست مطالعه که بعدتر در موردش مطالعه کنم و ببینم که دنیا دست کیه.
خلاصه، مطالعه پیرامون موفقیت سیستمهای عامل تموم شد. دلم میخواست اون موقع وارد جامعهای از برنامهنویسان بشم و ازشون یاد بگیرم و انتقال تجربه انجام بشه. به همین خاطر، در وبسایت برنامهنویس، ثبتنام کردم. اونجا بود که متوجه شدم یکی از اعضا، یک سیستم عامل نوشته به اسم آراکس. برخلاف عمده پروژههای سیستمعامل که دیده بودم، این یکی توزیع لینوکس نبود بلکه سیستمعاملی بود که از بیخ و بن توسعه داده شده بود و با خودم گفتم که پسر! باید با این رفیق شم حتما. اما خب نشد، یعنی نمیدونم چی شد ولی احتمالا شلوغی سر ایشون و عدم تمایلشون باعث این شد که دوستیای شکل نگیره.
خلاصه، کمی هم به زبان انگلیسی گشتم. اون موقع مثل الان زبانم خوب نبود و در فهم بسیاری از مطالب، مشکل داشتم. با این حال با گشتن در اینترنت به ویکی توسعهدهنگان سیستمعامل رسیدم. جایی که هزاران و دهها هزاران نفر دیگر، مشغول توسعه پروژههای خودشون بودند و همین باعث شده بود که من یک بهشت برین پیدا کنم. اما اونقدری نگذشت که امیدم ناامید شد. چرا؟ چند مدخل رو که خوندم فهمیدم از صفر نوشتن یک سیستمعامل که بتونه کلی کار ریز و درشت انجام بده به این سادگیها هم نیست. که البته اگر نظر خودم رو بخواهید، خیلی خوب شد که این اتفاق افتاد. بعدا در موردش حرف خواهم زد.
به همین خاطر، یک تحقیق بزرگی در مورد سیستمعاملهای متنباز موجود کردم که ببینم کدوم بعنوان پایه سیستمعامل میتونه گزینه خوبی باشه. گنو/لینوکس، بیاسدیها، هایکو و حتی کولیبری رو چک کردم و به این نتیجه رسیدم که خب، لینوکس بهترین گزینهست! حتی در این میان داشتم به اندروید هم فکر میکردم ولی باز پس ذهنم گنو/لینوکس رو داشتم. حالا وقت این بود که ببینم از کدوم یکی میشه یک نسخه شخصیسازیشده بهتر ساخت.
پیدا کردن توزیع مناسب به عنوان مبنا
خب وقتی که فهمیدم قراره بیس سیستمعامل من لینوکس باشه، نیاز داشتم که ببینم کدوم توزیع بهتره. به همین خاطر بارها و بارها، توزیع عوض کردم (و حتی همین امر موجب این شد که هاردم به شدت کند و حتی خراب بشه. بعد از مدتی حتی مجبور به تعویض هارددیسک لپتاپی شدم که اون زمان داشتم). نخستین توزیع، اوبونتو بود. بعدش دبیان. بعد اوپن سوزه، فدورا و … . به همین سبک و سیاق هزاران توزیع رو تست کردم که ببینم کدوم بهتره. البته دروغ چرا، هزاران خیلی مبالغهست. درستترش اینه که هر توزیعی که اسم و رسمی داشت رو نصب و آزمایش کردم که ببینم قضیه چی به چیه.
اما مشکلاتی هم در این میان بودند. یکی از بزرگترین مشکلات پیش روی من، اینترنتی بود که اون زمان داشتیم. اینترنت پرسرعتی بود نسبتا اما دو مشکل اساسی داشت. اولین مشکل محدودیت حجمی بود و خب طبیعتا میدونید که بسیاری از این توزیعها حتی موقعی که نصب میشن هم نیازمند اینترنت هستند و همین یعنی باید فاتحه اون حجم رو خوند. مورد دوم هم قطعیهای زیاد اون خط خاص بود. خلاصه که با تمام این ماجراها، من تهش به چند کاندیدای قدر قدرت رسیدم.
اولین کاندیدا، خود دبیان بود. اصل کاری، پدر اوبونتو. دبیان نصب و راهاندازیش هربار من رو پیر میکرد البته. به همین خاطر ترجیح دادم که مدتی کنارش بذارم. در همین میان، باز به اوبونتو برگشتم. بعد از بازگشتم به اوبونتو، با لینوکس مینت آشنا شدم. حقیقتا از مفهومی که مینت داشت هم خوشم اومد! فهمیدم که مطابق قوانین خیلی از کشورها، یک تعداد زیادی از نرمافزارها مثل فلشپلیر، فونتهای مایکروسافت، کدکها، واین و … امکان «بازتوزیع» یا Redistribute شدن ندارند. اما مینت از این قاعده مستثناء بود. چطور؟ مینت در ایرلند جنوبی ساخته شده. کشور ایرلند هم مثل روسیه و کشور ما، از کشورهاییه که کپیرایت درش به اون شکل مطرح نیست و شما احتمالا راحتتر میتونید این تیپ بازتوزیعها رو انجام بدید.
وقتی دیدم اینطوریه، با خودم گفتم چرا پایه این قضیه مینت نباشه؟ به همین خاطر مینت نصب کردم تا ببینم چی به چیه و دروغ چرا؟ عاشقش شدم. روی مینت گنوم ۳ نصب کردم و کلی باهاش کار کردم و دیدم عجب چیز خوبیه. خلاصه اینجا بود که کاندیداهای من به مینت و اوبونتو، تقلیل پیدا کردند.
پیدا کردن راهی برای پکیج کردن مجدد توزیع شخصیسازی شده
اینجا دیگه روی لپتاپ مینت نصب کرده بودم. شخصیسازیهای مختلفی رو روش انجام داده بودم و وقتش رسیده بود که یک پکیج ازش بسازم. در واقع میخواستم یک ISO بسازم که بتونم بعدا روی لپتاپ خودم یا کامپیوترهای دیگر به طور کل، نصبش کنم. به همین خاطر از Relinux استفاده کردم (این پروژه تقریبا دو سالی میشه که از رده خارج شده، ولی اون موقع جوان اول ابزارهای ساخت توزیع بود). حالا وقت این رسیده بود که یک مینت خوش رنگ و لعاب با هزاران هزار بسته رنگارنگ، به ISO تبدیل بشه و همین تبدیل همانا و سیستمعاملساز شدن من همان!
اما اینجا یه مشکلی پیش اومد. انقدر نرمافزارها زیاد بودند که حجم ISO تولیدی توسط Relinux بالای ۴ گیگابایت رفت. اگر این پست رو تشریف ببرید بخونید، توضیح دادم که استاندارد ISO9660 یک محدودیت روی حجم داره و بیش از چهار گیگابایت رو نمیتونه در خودش جای بده. همین امر، باعث شد که پروژه رو بکوبم و از اول بسازم. به همین خاطر، دوباره DVD اوبونتو 11.10 رو برداشتم (و در همون حین نخستین بتاهای ۱۲.۰۴ هم داشتند میومدند) و روی لپتاپ نصبش کردم. پس از نصب، تغییراتی روش دادم مثل جایگزینی یونیتی با گنوم، نصب تعدادی نرمافزار و جایگزینی تعداد دیگر. این بار شد! این بار واقعا شد و خب خوشحال و خرم بودم.
عکس از توزیع کاپریس است – کاپریس در سال ۹۹ ساخته شد.
انتشار نسخه اول به صورت LTS و اولین اشتباهات
خب در فروردین سال ۱۳۹۱، نخستین نسخه جبیر آمد. یادمه که ده روز قبل از انتشارش حتی این پست رو در فروم اوبونتو ایجاد کردم که خب همونطور که میتونید بخونید؛ کم هم حاشیه نداشته. خلاصه اینجا بود که اولین اشتباهات رو متوجه شدم. در این قسمت بیش از این که بخوام پیرامون این که جبیر چه بود مانور بدم، میخوام روی اشتباهات مانور بدم.
اولین اشتباه شاید برمیگشت به جهانبینی من. اینطور بخوام بگم که این جهانبینی این طور بود که اگر در ۱۶ سالگی یک سیستمعامل مثل جبیر ساختم، دیگه ته دنیای تکنولوژی و اینام. به قول یه بندهخدایی، دچار سندرم «جلوزدگی از خود» شده بودم. خب این مورد در سنین نوجوانی طبیعیه و حتی همین الان باور دارم که نسبت به سن و سال اون زمانم، واقعا کارم خفن بوده ولی نه اونقدری که خودم همیشه فکر میکردم. بهرحال در دوران نوجوانی خیلیها دوست دارند کارهای بزرگ کنن و همونطور که در مطلب پیشین عرض کردم، این قضیه باعث شد من بشم اینی که الان هستم.
خلاصه این اشتباه، اشتباه اول بود. اشتباه دوم این بود که فکر میکردم اینجا میتونم سبک و سیاق اپل رو پیش بگیرم. یعنی چی؟ یعنی که یک سیستمعامل مبتنی بر یک سیستمعامل دیگر بسازم و بعدش، کدش رو ببندم و نهایتا سختافزارهای مبتنی بر اون سیستمعامل رو به ملت بفروشم. نه روی زیرساخت فکری داشتم، نه روی این که پروانهها چه اجازههایی میدند. خلاصه که اینجا کلی اشتباه پشت هم دیدیم. اما تلاش کردم این موارد رو در نسخه ۲ اصلاح کنم.
نسخه ۲، رابط کاربری افسانهای
توزیع آریوس، علاوه بر این که ریمستر از اوبونتو بود دو ویژگی داشت که از سایر توزیعهای ریمستر؛ متمایزش میکرد. یکیش نصاب آفلاین درایورها بود، دیگری این که یک رابط کاربری خیلی خوشگلی هم داشت که خب به شکل یک نشست روی گنوم اجرا میشد. در نسخه دوم تصمیم گرفتم چنین تغییری رو ارائه بدم. به همین خاطر، با کمک AWN, Mutter و یک سری تغییر ریز دیگر، یک رابط کاربری نسبتا کاستوم ساختم و اسمش هم گذاشتم Legendary UI یا «رابط کاربری افسانهای». همچنین در کنار اون نسخه، یک ایزو با XFCE هم ارائه کردم که خب در این مقطع، جبیر با دو میز کار داشت عرضه میشد.
حقیقتا نسخه ۲ تا حد خوبی ترکوند. به حدی که با این پروژه به جشنوارههای استانی و کشوری (منجمله خوارزمی) راه پیدا کرده بودم. این رو هم اینجا بگم چرا که واقعا نمیتونم این رفرنس رو اینجا ندم 😁 در فیلم The Social Network – که داستان ساخت و رشد فیسبوک رو به شکل سینمایی روایت میکنه – کرکتر Divya Narendra (یکی از شرکای دوقلوهای وینکلواس در پروژه Harvard Connection) در مورد مارک زاکربرگ میگه که «مارک بزرگترین شخصیت دانشگاه شده بود. اون هم دانشگاهی که نوزدهتا برنده نول و پونزدهتا برنده پولتیزر و حتی یک ستاره سینمایی داره». حقیقتا در میان دانشآموزان اون مدرسه و حتی شهر بندرعباس من چنین حسی داشتم و همینجا بود که دوباره کمی از خودم جلو زدم. اما این تمام ماجرا نبود. جزییات این بخش رو، در قسمتهای بعدی این داستان خواهیم خوند.
نسخه ۳ و ۴، مشکل اینترنت و متاع خنده؟
در نسخه ۳، تغییر خاصی نبود جز این که قبل از این که Ubuntu GNOME Remix منتشر بشه، این توزیع با میزکار گنوم عرضه شد (حقیقتا جا داشت این مورد شدیدا بهش اشاره بشه). اگر دوست دارید در مورد این نسخه بیشتر بدونید میتونید به این مصاحبه من با لینوکس سیزن مراجعه کنید و کمی با ذهنیت من در اون سال آشنا شید. نسخه ۳ خیلی حاشیه نداشت. در عین حال، خیلی هم سر و صدا و برند نساخت. یک توزیعی بود که نصب میشد و خلقالله استفاده میکردند.
نسخه ۴، برای من خیلی مهم بود. در این حد که حتی اسم نسخهش هم خواستم یک چیز باحال انتخاب کنم و از همین رو، اسم رو گذاشتم Pirates of Galaxy یا «غارتگران کهکشان». در این یکی نسخه خیلی سعی داشتم که همهچی رو مینیمال در عین حال شخصی نگه دارم. اما یک مشکل اساسی اینجا پیش آمد. مشکل چی بود؟ مشکل این که اوبونتو باگی داشت که اگر شما اون رو باز دوباره بستهبندی میکردی، نمیتونست کارت شبکه رو درست شناسایی کنه و به اینترنت متصل نمیشد. همین موضوع باعث این کامنت از جادی شد:
خب بخش اول کامنت تذکری بود به دوستی که ظاهرا ادب رو رعایت نکرده بود. بخش دوم هم از نظر من بد نیست، اما نکته مهم برخورد جامعه نرمافزار آزاد با این موضوع بود. چرا؟ چون من یادمه حتی سال ۹۶ که خودمم یادم نبود چه کرده بودم تو این سیستمعامل، در بعضی جلسات لاگ و بعضی رویدادها این موضوع شده بود متاع خنده! طبیعتا هیچکس خوشش نمیاد کاری که در نوجوانی کرده و حتی کار بدی هم نبوده (ساخت توزیع لینوکس واقعا کار بدی نیست، شاید بیهوده باشه ولی بد، نه!) سوژه خنده یک جمع باشه.
خلاصه اینجا دیگه شد آخرین جایی که جبیر بعنوان یک توزیع گنو/لینوکس عرضه شد و دفترش به پایان آمد. اما حکایتش همچنان باقی ماند.
رفتن سراغ BSD
بعد از جبیر ۴، دیگه تصمیم رو جدی گرفتم. با خودم گفتم لینوکس برای من سیستم بشو نیست :)) در این حد که هرجا بحثی از لینوکس میشد، سریعا اشاره میکردم به این که در PlayStation 4 از FreeBSD استفاده شده، واتسپ داره FreeBSD استفاده میکنه و OpenBSD ایمنترین سیستمعامل جهانه و اپل با BSD اپل شد و اینها و در عین حال لگدی هم به لینوکس میزدم و میگفتم این سیستمعامل، یک سیستمعامل مردهست.
در همین حین، ما باز به تهران برگشتیم و خب کمی سخت بود که روی توسعه جبیر کار کنم چرا که اینترنت درست و درمونی نداشتم، لپتاپم برای کامپایل کردن کدهای FreeBSD ضعیف بود و کلی داستان و مشکل از این قبیل پیش آمد. خلاصه پس از این که مدتی گذشت و کمی این مشکلات حل شد، موفق شدم که جبیر رو دوباره از نو با کرنل FreeBSD تولید کنم و بعد مدتی حتی اسم کرنل رو از FreeBSD به JabirOS تغییر دادم (که خب این خودش یک اشتباه خیلی خیلی بزرگ محسوب میشد چون عملا از پورتها نمیشد دیگه استفاده کرد) و کلا در مسیری بودم که با خودم میگفتم «دو سال دیگه به اپل رسیدم».
یکی از دلایلش، این بود که من کم کم داشتم وارد مدیای خارجی میشدم. مثلا این وبسایت، خبر انتشار جبیر جدید رو کار کرد یا این یکی، با من مصاحبهای ترتیب داد. همه این موارد دست به دست هم دادند تا من خیلی بیشتر از پیش، از خودم جلو بیفتم.
اما خب این موضوعات پشت سر هم، پیشدانشگاهی و کنکور و ورود به دانشگاه باعث شدند که کلا بیخیال پروژه جبیر بشم و این مورد باعث شد که ذهنم برای پروژههای دیگری که در این سالها انجام دادم بازتر بشه.
این داستان ادامه دارد
فکر میکردم شاید این داستان چهار یا پنج قسمت بشه، اما تا اینجا که توضیحاتم رو ارائه کردم، فکر کنم کلا یک مطلب دیگر که کلیت این دو قسمت رو جمعبندی کنه و کمی به رفتارهای اطرافیان – بخصوص جامعه نرمافزار آزاد – و داستانهایی مشابه شرکت در جشنواره خوارزمی و … اشاره کنه، کافی باشه.
خلاصه، دوست دارم ازتون تشکر کنم که تا اینجای مطلب رو خوندید و همراه من بودید. من همیشه دوست داشتم این تجربه رو مکتوب کنم و خب اتفاقات اخیر، موجب این شد که این مطالب مکتوب بشند و در وبلاگ هم به رشته تحریر دربیان.
در نهایت، برای تکتک خوانندگان این بلاگ، آرزوی موفقیت و خوشحالی میکنم.
احتمالا اگر وبلاگ یا محتوایی که من تولید میکنم رو دنبال کرده باشید، با مفاهیم و اسامی خاصی من رو به یاد خواهید آورد. چه مثل چند ماه اخیر با پروژههای بینایی ماشین ، چه روبی و ریلز که چندین ساله کم کم با اون شناخته میشم، چه لینوکس و سختافزار و این داستانها. احتمالا هم اگر از دنبالکنندگان این وبلاگ باشید، میدونید که داستان برنامهنویس شدن من (قسمت اول، قسمت دوم) چیه و چطور شد که من شدم اینی که هستم.
اما قطع به یقین، خیلی از دوستان قدیمیتر من رو با «پروژه جبیر» یا «جبیر او اس» یا «سیستمعامل جبیر» میشناسند. پروژهای که من رو با جدیت وارد دنیای توسعه نرمافزار، نرمافزار آزاد و جامعه کاربری گنو/لینوکس ایران کرد. در این پست، قصد دارم تا در مورد پروژه جبیر کمی بنویسم. در واقع، قصد من اینه که داستان این پروژه رو تعریف کنم و بگم که چی شد که اینطوری شد 🙂
چرا این مطلب نوشته شد؟
حقیقتا از سال ۹۴ به بعد که دیگه وبسایت پروژه جبیر آپدیت نشد و حتی از برند جبیر برای پروژهای استفاده نشد، دلم نخواست که راجع بهش چیزی بنویسم. چرا که این پروژه علیرغم تمام خوبیها و آموزههاش برای من، خاطرات بدی هم داشت و خب هرچیزی، لازمه که روزی کنار گذاشته بشه. در حقیقت، جایی که انسان حس میکنه باید رها کنه، باید رها کنه و برای من این زمان سال ۹۴ بود. زمانی که همهجا اعلام کردم پروژه جبیر، چه در قالب «توزیع لینوکس» و چه در قالب «نسخهای از BSD» دیگر عرضه نخواهد شد.
اما چندی پیش، پای یکی از پستهای جبیر (لینک) نظری دریافت کردم (که البته تایید نشده) و در بخش آمار وبگاه (که به کمک افزونه Jet Pack بررسی میکنم) هم متوجه شدم که افرادی هستند که در حال رصد کردن گذشته من هستند. یکی از چیزهایی که عمیقا بهش باور دارم اینه که نباید در گذشته افراد زیاد کند و کاو کرد، چرا که تهش شما یا خودت ضایع میشی یا چیزی که دنبالش میگردی چیزی در حد زیربغل مار خواهد بود. پس با این حساب، تصمیم گرفتم که در یک سلسله مطلب جامع، داستان جبیر او اس رو جمع کنم.
حالا وقت اینه که حدودا ده سال در زمان سفر کنم و برسیم به سال ۸۹-۹۰ که این پروژه رو استارت زدم، بگم چی شد که این پروژه به ذهنم رسید و چطور شد که رفتم سمت لینوکس و … .
جرقههای اولیه
بسیاری از افرادی که من رو میشناسند، از ارادتی که نسبت به استیو جابز دارم، خبر دارند. سال حدود ۸۹ بود و من در مجلاتی که اون زمان به صورت روتین از قیمت فلان گوشی و فلان کامپیوتر و فلان کارت گرافیک مینوشتند از رونمایی از محصولات جدید اپل مثل iPhone 4 یا iPad میخوندم. بعد مدتی، با استیو جابز و زندگی اون آشنا شدم و فهمیدم که این بابا، آدمی بوده که خیلی خیلی از صفر شروع کرده (تقریبا بر خلاف خیلی از ابرپولدارهای سیلیکونولی، ایشون اصلا خونواده متمول و حتی اهل فنی نداشته و خونوادهای که درش رشد کرده بوده یک خونواده خیلی معمولی بوده).
خلاصه آشنایی با استیو جابز، بعدش خریدن یک iPod Touch 3G در من جرقهای روشن کرد. جرقهای مبنی بر این که «من باید دنیا را تغییر بدم». تغییر دنیا، کار سختیه. خیلی از ما جایی از زندگی این قصد رو داشتیم ولی کار خاصی براش نکردیم. خیلیها هم حرکتایی زدیم ولی بعدا سرمون به سنگ خورده. خلاصه که خیلیامون اونقدری دیوانه بودیم که روزی بخوایم دنیا رو تغییر بدیم و به قول استیو جابز، افرادی که اونقدر دیوانن که فکر میکنن میتونن دنیا رو تغییر بدن، دقیقا همونایین که دنیا رو تغییر میدن.
در همون سالها بود که ما مهاجرتی از تهران به بندرعباس داشتیم و خب حقیقتا این مهاجرت و دوری از فضای تهران – بویژه محلهای که درش بزرگ شده بودم و طبیعتا بسیاری از همکلاسیهای دبیرستانم هم قرار بود همون بچههای راهنمایی و دبستان باشند – باعث شده بود کمی ناامید و افسرده باشم. تمام این دلایل دست به دست هم دادند که من تصمیم بگیرم که بخوام استیو جابز دوم باشم (شاید اشتباه همین بود، هوم؟).
خلاصه شبانهروز در حال ایدهپردازی بودم. اما ایدهها همین جا متوقف نشدند. ایدهها خیلی بیش از اون چه که فکر کنید پیش رفتند در ذهنم. اما نیاز داشتم یک محرک خیلی اولیه داشته باشم. نمیدونستم چه محرکی ولی بهرحال یک محرک نیاز بود.
من باید سیستمعامل بسازم
بالاخره پیداش کردم. محرکی که لازم داشتم تا باهاش دنیا رو تغییر بدم، پیدا کرده بودم. شاید باورتون نشه ولی به معنای واقعی در نقطه نقطه بدنم شور و شوق رو حس میکردم و برای انجام این کار، انگیزه بسیار بسیار زیادی داشتم. حالا که این انگیزه بود، سوال اینجاست که چرا نه؟ اما قبل از هرچیزی بهتره ببینیم که این انگیزه چی بود.
نمیدونم شما چقدر با نشریات قدیمی آشنایید ولی نشریه مورد علاقه من، یا بهتر بگم یکی از نشریات مورد علاقه من، مجله دانشمند بود. مجله دانشمند مطالب علمی و فنی جالبی داشت. در اون میشد از ژنتیک و زیستشناسی تا هوش مصنوعی و … رو خوند و یاد گرفت و لذت برد. در بسیاری از شمارههاش، کارهای عملی رو توضیح میداد که شما میتونستید در خانه انجام بدید و … . خلاصه کلام که یکی از بهترین نشریاتی بود که میخوندم.
در تابستان ۸۹ یا ۹۰ بود که درست یادم نیست؛ در یکی از شمارههای دانشمند کتاب «سیستمهای عامل: طراحی و پیادهسازی» اثر «اندرو استوارت تنن باوم» معرفی شده بود. به صورت خلاصه بگم، در این مطلب اومده بود که انگیزه تننباوم از نوشتن این کتاب چی بوده و چه فرایندی (بسته شدن کد منبع یونیکس نسخه ۷) باعث شد که سیستمعامل خودش رو از بیخ بنویسه و بعد از اون، شروع کنه به این که مراحل توسعه رو مستند کنه و در قالب یک کتاب برای دانشجویانش و همچنین علاقمندان عرضهش کنه.
اما این کل ماجرا نبود. آخر این مطلب اشاره شده بود که این کتاب و این سیستمعامل (مینیکس) باعث شدند که دانشجوی فنلاندی بیاعصاب، یعنی لینوس تروالدز؛ برای این که بتونه با مینیکس درست و حسابی کار کنه و گروههای گفتوگو رو بخونه و … یه سری ابزار توسعه بده و در همین حین یک هسته هم از بیخ و بن بنویسه. در ادامه توضیح داده شد که لینوس تروالدز یک باره هاردش رو نابود کرد (و خب شاید این نابودی یکباره هارددیسک که در میان لینوکسیها شایعه، از همین قضیه نشات بگیره 😂) و این نابودی باعث شد که سیستمعامل خودش – که ملغمهای از ابزارهای پروژه گنو و کرنلش بود – رو روی دستگاهش نصب کنه.
در ادامه کمی به تاریخچه لینوکس و دعواهای روتین تروالدز با بقیه اشاره کرده بود. این بخش کاملا من رو شیر کرد. من این بند رو که خوندم (و دقیقا یادمه که داخل یک خودرو هم بودیم که من این مطلب رو خوندم) با صدای بلند گفتم که «من باید سیستم عامل بسازم» طوری که خونواده هم نگاهشون به سمتم برگشت. خلاصه که این شد که من تصمیم گرفتم که اولین پروژه خیلی جدی زندگیم، یک سیستم عامل دسکتاپ باشه.
نخستین مطالعات، نخستین پیادهسازیها
خب من بعد از خوندن اون مطالب یادمه که کتابی به اسم «کلید لینوکس» که آموزشش بر مبنای «اوبونتو ۱۰.۰۴» بود رو خوندم و خیلی چیزا ازش یاد گرفتم. در عین حال، روی یک ماشین مجازی اوبونتو نصب کردم و کمی از آموزشهایی که از لینوکس دیده بودم بهره بردم که ببینم چه خبره و دنیاش دست کیه. بعد از اون خلاصه اینطور شد که یک روز تصمیم گرفتم اوبونتو ۱۱.۰۴ (یا دقیق یادم نیست، ۱۱.۱۰) رو روی لپتاپم نصب کنم و حین نصب کل دیتام هم پرید.
بعد از این نصب، شروع به این کردم که یاد بگیرم که چطور میتونم شخصیسازی کنم و تا حد خوبی هم موفق بودم. اما هنوز کلی علامت سوال در ذهنم بود. به همین خاطر، کاری که کردم این بود که وارد فروم اوبونتو شدم و این سوالات رو پرسیدم. اینگونه بود که ماجرای عریض و طویل جبیر، آغاز شد …
این داستان ادامه دارد …
تا همین الان، این مطلب شدیدا طولانی شده. به همین خاطر این مطلب رو اینجا قطع میکنم و اجازه میدم که شما حدس بزنید باقی ماجرا چی شد. البته دروغ چرا، باقی ماجرا رو خیلی زود (شاید حتی فردا شب) در وبلاگ منتشر میکنم و منتظر بازخوردهای شما میمونم.
امیدوارم که این مطالب، اطلاعات خوبی به شما از روند یک پروژه اوپن سورس که از قضا در جاهای مختلفی به شدت اشتباه زده؛ بده و براتون مفید واقع بشه. از این که وقت گذاشتید و این مطلب رو خوندید، ممنونم.
چندین روز پیش، شخصی در لینکدین خبری از ساخته شدن یک فراجستجوگر داده بود که به شخصه برای من موضوع جالبی بوده همیشه. منتها طبق عادات مالوف هموطنانمون، بزرگ حرف زدن و زیادی مبالغهکردن هم میشد در اون حرفها دید. چیزی که ساخته شده بود اینطور توضیح داده شده بود که:
فراجستجوگر ساخته شده توسط تیمی از بهترین متخصصان که در یک دانشگاه خاص درس خواندند (که خب همین جملات، بدون توجه به اسم دانشگاه و موسسه و … معمولا پرچم قرمزی در بحث تولیدات ملی و بومیه) به این شکل کار میکنه که نتایج جستجو رو از وبسایتهای معروف به موتور جست و جو مانند گوگل، داکداکگو، بینگ و … برمیگردونه و رد پای شما رو از جست و جو حذف میکنه.
وقتی این رو خوندم، فهمیدم که با یک فراجستجوگر یا metasearch engine روبرو هستیم و خب گفتم بد نیست که با هم یکی بسازیم. قبل از هرچیزی، اگر نمیدونید فراجستجوگر چیه، میتونید به اینجا مراجعه کنید و تعریفش رو بخونید. برای ادامه دادن به مطالعه این مطلب هم لازمه که کمی لینوکس و مدیریت سیستم بلد باشید.
آشنایی با searx
خب searx یک نرمافزار آزاده که هدفش، بهبود تجربه جست و جوی افراد در اینترنته. این نرمافزار، به دو صورت قابل دسترسیه. اول این که تعدادی نمونه عمومی داره (لینک نمونههای عمومی در اینجا قرار گرفته) و هم به صورت «خودمیزبان» یا همون self-hosted. متد خودمیزبان یعنی شما به عنوان کاربر، میتونید به صورت رایگان یا با پرداخت پول (بسته به مدل کسب و کار و توسعه اون پروژه خاص)، اون نرمافزار رو روی هاست یا سرور مورد نظر خودتون نصب کنید.
در این آموزش، قراره با کمک یک سرور لینوکسی، یک زیردامنه، یک کارساز وب و داکر؛ یک فراجستجوگر ساده رو به کمک هم بیاریم بالا. به این شکل میتونیم هم یک نمونه عمومی عرضه کنیم، هم این که دیتای کمتری در اختیار شرکتهایی مثل گوگل یا مایکروسافت بذاریم.
ساخت فراجستجوگر
برای ساخت فراجستجوگر خودمون، نیاز به موارد زیر داریم:
سرور لینوکسی. من شخصا از اوبونتو ۱۸.۰۴ استفاده کردم. برای پردازش بهتر نتایج و نخوردن به مشکل تحریم و …؛ بهتره که سرور داخل ایران هم نباشه. به همین خاطر، من از سرور هلند استفاده کردم (کشور محل قرارگیری سرور، کاملا به خودتون بستگی داره).
یک دامنه یا زیردامنه. برای این پروژه من از searx[dot]haghiri75[dot]com استفاده کردم.
کمی آشنایی به کارهای سروری. اگر آشنایی خاصی ندارید هم مهم نیست! در حد لزوم در این مطلب یاد میگیرید 😁
آمادهسازی سرور
وقتی سرور رو از ارائهدهنده سرور تحویل گرفتیم (با فرض اوبونتو/دبیان بودنش) نیازه تا اول لیست بستههای اون رو کمی به روز کنیم:
sudo apt update
و اگر لازم شد، کل سیستمعامل هم یک بار بهروز میکنیم:
sudo apt full-upgrade
بعد از این که این اتفاقات رخ داد، یک دور سرور رو ریبوت میکنیم و پس از بوت شدن مجدد و اتصال به سرور، چند بسته نصب میکنیم:
nginx: این بسته، وبسرور یا همون کارساز وب ماست. چیزی که باعث میشه ما بتونیم بدون مشکل، یک وبسایت یا نرمافزار تحت وب رو استفاده کنیم.
python3-certbot-nginx: از این بسته استفاده خواهیم کرد تا یک گواهی SSL برای وبسایت خودمون بگیریم.
docker.io: داکر یک سیستم کانتینرییزشنه. در واقع نرمافزارها رو داخل بستههای کوچولو قرار میده و همه ملزوماتشون اونجاست. فقط تنها موردی که داره، اینه که از هسته سیستم عامل استفاده میکنه برای مدیریت فرایندها (در واقع تفاوتش با ماشین مجازی همینه).
حالا ما سرور رو آماده کردیم. گام بعدی چیه؟
آمادهسازی دامنه
برای آمادهسازی دامنه، کافیه که یک رکورد A با IP سرور مورد نظر ایجاد کنید. البته در بعضی موارد از CNAME هم میشه استفاده کرد اما اینجا چون سرور از وبسایت جدا بود، یک A تعریف شد. بعد از این که رکورد رو تعریف کردیم، باید ۵ تا ۱۰ دقیقه صبر کنیم تا عموم DNS Server های اینترنت، بشناسنمون. بعدش میتونیم به کارمون ادامه بدیم.
حالا ۱۰ دقیقه گذشت و یک قهوه هم خوردیم و آمادهایم که مرحله بعدی رو انجام بدیم.
دریافت گواهی SSL
خب دریافت گواهی SSL هم بسیار سادهست. کافیه این دستور رو در سرور اجرا کنید (و دامنه من رو با دامنه خودتون عوض کنید):
sudo certbot -d searx.haghiri75.com --nginx
در این مرحله شما باید آدرس ایمیلتون رو وارد کنید و به چند سوال هم پاسخ بدید. در کل همهچیز با یک wizard اتفاق میفته و نیازی نیست که زحمت زیادی بکشید. فقط یک نکته مهم رو اینجا باید بهش دقت کنیم. اون نکته اینه که certbot اینجا خودش nginx رو استارت میزنه. در مرحله بعدی، نیاز داریم که به این مهم توجه کنیم.
راهاندازی داکر و نصب فراجستجوگر
خب اول از همه کاربر خودمون (که در اینجا فرض میگیریم نام کاربریش هم Ubuntu ئه) رو به گروه داکر اضافه میکنیم:
sudo usermod -aG docker ubuntu
بعدش کافیه یک بار از نشست SSH خارج شیم و دوباره به سرور SSH بزنیم. دقت داشته باشید که این بخش الزامی نیست؛ ولی اگر شما این کار رو نکنید بعدا در استفاده از داکر، نیازمند دسترسی ریشه خواهید بود. نگران دسترسی ریشه هم نباشید چون با sudo قابل حله.
بعد از این مورد، ایمیج searx رو از رجیستری داکر دریافت میکنیم:
docker pull searx/searx
خب در حال حاضر، اتفاق خاصی میافته؟ خیر. فقط تصویری که searx روی اون نصب شده، روی سرور ما دانلود شده.
بعد از اون، نیازداریم که یک کانتینر براش بسازیم. برای این، مراحل زیر رو طی میکنیم:
mkdir searx
cd searx
docker run --rm -d -v ${PWD}/searx:/etc/searx -p 8080:8080 -e BASE_URL=http://localhost:8080/ searx/searx
خب تبریک به شما، الان شما یک فراجستجوگر دارید.
اما صبر کنید! هنوز نمیتونیم بهش دسترسی پیدا کنیم. پس چه کنیم؟
پراکسی معکوس برای دسترسی به محتوا
خب اینجا نیاز داریم که از پراکسی معکوس استفاده کنیم. انجینکس علاوه بر این که وبسروره، پراکسی معکوس هم هست و خیلی از ما عمدتا از قابلیت پراکسی معکوسش برای اجرای نرمافزارهای تحت وبمون استفاده میکنیم. مثل همین آموزش دپلوی کردن یک پروژه ریلز نوشته بودم (لینک). دونستن این که پراکسی معکوس چیه و چی کار میکنه، از ملزومات پایهای مدیریت سیستم و همچنین دواپس و CI/CD محسوب میشه (جهت اطلاعات بیشتر این پست رو بخونید).
پس اگر میخواهید در آینده مهندس DevOps بشید، شاید بتونید این مطلب رو فرصتی برای تمرین یکی از مواردش قرار بدید. فکر کنم زیاد صحبت کردیم. بریم سر اصل مطلب. برای این که بتونیم از پراکسی معکوس استفاده کنیم، کافیه که اول با ادیتور دلخواهمون، فایل پیکربندی رو باز کنیم:
sudo nano /etc/nginx/sites-enabled/default
و سپس دنبال دامینمون بگردیم (در نانو با ctrl + W میشه). بعد از این که دامینمون رو پیدا کردیم کافیه بخش location / رو پیدا کنیم (معمولا دو سه خط پایینتر از دامین و تنظیماتشه) و سپس به این شکل درش بیاریم:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
proxy_pass http://localhost:8080;
}
و بعدش هم کافیه که دستور زیر رو اجرا کنیم تا انجینکس ریستارت بشه:
sudo systemctl restart nginx
استفاده از فراجستجوگر شخصی
سخن آخر
نرمافزار searx مثل هر نرمافزار متنباز و آزاد دیگری، قابلیت شخصیسازی داره و همین موضوع که با زبان پایتون نوشته شده هم نشون میده که شخصیسازیش احتمالا از چیزی که فکر میکنیم، سادهتره. به همین خاطر میتونیم به سادگی این نرمافزار رو تغییر بدیم که مطابق میل خودمون کار کنه و طبیعتا آموزشش هم در اینترنت وجود داره.
موضوع بعدی اینه که فراجستجوگرها، علاوه بر این که میتونن در حفظ حریم شخصی و … موثر باشند، میتونن کاملا بیزنسی هم کار کنند. مثلا هرکلید واژهای که سرچ کنید رو صرفا در موضوع خاصی دنبالش بگردند. مثلا شما اگر سرچ کنید «سیبزمینی» فقط در وبسایتهایی که وبینار میزبانی میکنند دنبالش بگرده. وقتی سرچ میکنید «قشم» فقط در وبسایتهای گردشگری دنبالش بگرده و الی آخر.
در این مطلب قصد داشتم این موضوع رو نشونتون بدم که داشتن یک موتور جست و جوی امن، اونقدرا که فکر میکنید سخت نیست و با کمک نرمافزارهای آزاد، به سادگی میتونید یکی رو خودتون بسازید. در پایان مطلب، جا داره از شما بابت خوندن این مطلب تشکر کنم. همچنین، ممنون میشم مطالب و خطخطیهای من رو در ویرگول هم بخونید و نظر بدید 🙂
در پست پیشین، یعنی قسمت اول داستان برنامهنویس شدنم (لینک) از زمانی که شروع به خوندن کتابهای ویژوال بیسیک کردم تا زمانی که پروژه جبیر رو راه انداختم رو به تفصیل توضیح دادم. فکر میکنم داستان برنامهنویس شدن من، داستان جالبی برای خیلی از دوستانی که وبلاگم رو میخونن بوده و به همین دلیل، تصمیم گرفتم که قسمت دومش هم حتما بنویسم.
همونطوری که در قسمت قبلی قولش رو داده بودم، قراره که در این قسمت از بعد از پروژه جبیر تا زمانی که وارد بازار کار شدم رو توضیح بدم و بگم چی شد که اینطوری شد. در مورد مسیرهای شغلی قبلتر توضیح دادم (مثلا در پست چگونه توزیع لینوکس بسازیم و یا پست چگونه بازیساز شویم) همینطور حتی ابزارها و وسایلی که در مسیر شغلهای مختلف طراحی و تولید کردم (مثل صداگذاری روی بازی کامپیوتری) هم در این وبلاگ پیشتر توضیح دادم. فلذا در این مطلب، اصلا و ابدا به مسیرهای شغلی اشاره نخواهم کرد.
ورود به دانشگاه
در طی این سالها، یعنی از حدود ۹۱ تا ۹۳ راههای زیادی رو رفتم که سرویسها و نرمافزارهای خاصی رو طراحی کنم و خب دروغ چرا، تا حد زیادی هم رویای استیو جابز یا زاکربرگ شدن هم در سر داشتم و خب کارهای مختلفی مثل ایجاد انجمنهای اینترنتی مختلف (ایرانبیاسدی، ایرانهکینتاش و …) گرفته تا برپا کردن شبکههای اجتماعی و نرمافزارهای آنلاین دیگر (اکسوال، نکستکلود و …) رو انجام میدادم. راستش این راهها من رو به قول خارجیها Satisfy نمیکرد و همچنان دنبال این بودم که یک سیستم عامل خوب بسازم!
خلاصه شد سال ۹۲ و ما از شهر بندرعباس به تهران برگشتیم. اون سال، سال پیشدانشگاهی من بود (و بد نیست این داستانکم رو هم پیرامونش بخونید) و اون سال، یک تصمیم بزرگ هم گرفتم. تصمیمم این شد که جبیر به جای این که مبتنی بر اوبونتو (یک توزیع از گنو/لینوکس)، یک نسخه شخصیسازیشده از FreeBSD باشه. از همین رو، شروع کردم به رفتن به IRC های مختلف، سوال پرسیدن و مستندات خوندن. بعد از چندین ماه مطالعه، وضعیت اینترنت خونه و خودم تا حد خوبی پایدار شد و بعد شروع کردم به انجام تغییرات روی کد FreeBSD.
بعد از مدتی، پروژه جبیر تا حد خوبی پیش رفت و گذشت و گذشت و من کنکور دادم (داستانی از کنکور هم اینجا نوشتم) و وقتی نتایج اومد، فهمیدم که در دانشگاه آزاد اسلامی واحد تهران مرکز در رشته مهندسی کامپیوتر و گرایش سختافزار قبول شدم.
شرکت در لاگها و رویدادها و آخر و عاقبت پروژه جبیر
حضور در تهران و دانشجو شدن، به من کمک کرد که وارد جامعه بشم و در رویدادهای نرمافزار آزاد و متنباز و سایر رویدادها (مثل PyCon و …) شرکت کنم. اولین رویدادی که شرکت کردم، رویدادی بود به اسم «جامعه رایانش ابری آزاد». در اون رویداد با KVM و Docker آشنا شدم و تا حد زیادی هم دانشم در زمینه Containerها و مجازیسازی تا حد خوبی بالا رفت.
در حاشیه شرکت در این رویدادها، بسیاری از افرادی که از انجمن اوبونتو و یا تکنوتاکس یا لینوکسریویو میشناختم رو حضوری دیدم و باهاشون آشنا شدم و حتی رفاقتهایی شکل گرفت. پس از مدتی، در بحثی دوستانه، تصمیم بر آن شد که پروژه جبیر کلا منحل بشه و پروژهای به این بزرگی که نیازمند دانش فنی بالا، پول زیاد و همچنین حوصله فراوونه، به زمانی موکول شه که بتونم از پس حداقل یک موردش بربیام. فلذا پروژه جبیر اعلام شد که دیگه قرار نیست ادامه پیدا کنه.
اگر دوست دارید ببینید که پروژه جبیر چه شکلی بوده، میتونید این لینک مربوط به وب آرکایو رو هم ببینید: لینک. در ادامه، بنا به دلایلی (که در ادامه این مطلب بهش میپردازیم) تصمیم شد که پروژه جبیر بیشتر روی فاز سختافزاری باشه و چند مطلب هم در موردش حتی نوشتم(لینک).
یادگیری روبی، ورود به حوزه سختافزار و دیگر هیچ!
مهرماه ۹۳ بود که من خیلی جدی تصمیم گرفتم حداقل یک زبان برای توسعه وب رو جدی یاد بگیرم. قبلترش، کتاب «از این پس پایتون» رو خونده بودم و به همین خاطر هم کمی با پایتون و فلسک آشنا بودم. دوستی یک کتاب جنگو هم برای من ارسال کرد. اما در همون هنگام در بحثی در IRC که دقیق یادم نیست مربوط به occc بود یا لاگ کرج، دوستی به من پیشنهاد کرد که روبی و روبیآنریلز رو یاد بگیرم. در ادامهش، توصیه کرد که حتما با دیتابیسها آشنا شم و کمی هم مهندسی نرمافزار یاد بگیرم.
من هم این توصیه رو عملی کردم و شروع کردم به خوندن روبی. شاید باورتون نشه ولی از اونجایی که دیدم زبون روبی، خیلی در ایران زبون روتینی نیست و خیلیها باهاش غریبهند، تصمیم گرفتم دانش خودم رو در قالب یک کتاب الکترونیکی دربیارم و خب نتیجه پس از مدت نسبتا طولانی شد کتاب آموزش روبی که به رایگان قابل دانلوده.
خب همونطوری که ابتدای متن گفتم، من گرایش سختافزار بودم و حقیقتا این وسط به سرم زده بود دانش سختافزاری خودم رو هم بالا ببرم. به همین خاطر ترم ۳ یا ۴ که بودم، قبل از این که به مدار منطقی برسم، خودخوان شروعش کردم. برام جالب بود و خب در عین حال ریاضیات گسسته هم برای من داشت مرور میشد. این مرور، در کنار دانش مدار منطقی من رو وادار کرد که کمی بیشتر بخوام در این حوزه ورود کنم. به همین خاطر، معماری کامپیوتر و ریزپردازنده رو هم حتی پیش از این که درسم بهشون برسه، مطالعه کردم.
وقتی به نتایج جالبی رسیدم، تصمیم گرفتم دوباره دانشم رو با مردم به اشتراک بذارم. به همین خاطر، این بار هم محتوا رو به زبون انگلیسی تولید کردم (لینک) و به رایگان در نسخه انگلیسی همین وبلاگ منتشرش کردم. خلاصه که اینجا تموم نمیشه. در اون سالها، بازار «اینترنت چیزها» یا IoT هم داغ بود و خب طبیعتا شروع کردم به یادگیری آردوینو، رزبریپای و … و پروژههای جالبی هم با اونها انجام دادم. البته خیلی از این پروژهها رو هنوز که هنوزه عمومی نکردم.
خلاصه این مورد هم گذشت و رسیدیم به شهریور ۹۶. یعنی جایی که من خیلی جدی و رسمی وارد بازار کار شدم.
ورود به بازار کار
در تیرماه ۹۶، در رویدادی شرکت کردیم که مرتبط با فعالان صنعت بازی رایانهای بود. این رویداد، به طور خاص به آهنگسازان و مهندسین صدا اختصاص داشت و خب بخاطر علاقه شخصیم به موسیقی، در این رویداد شرکت کردم. آخر رویداد گپ و گفتی با سخنران رویداد داشتم که باعث شد شخصی بیاد خودش رو معرفی کنه و بگه که تیمشون نیاز به آهنگساز داره. پس از مدتی، مدیر استودیو به من پیام داد و گفت بازیای در ژانر کودکه و خب نمیدونم چی شد که اون موقع، این بحث ادامه پیدا نکرد.
اما شهریور ۹۶ یکی از دوستانی که در همون استودیو مشغول بود، برای یک بازی دیگر من رو دعوت کرد به همکاری. یک مصاحبه ریزی داشتیم و پس از اون مصاحبه، قرار شد من برم و همکاری کنم. پس از این ماجرا، من رسما وارد اکوسیستم و بازار کار شدم تا به امروز.
سخن آخر
خب، در این مطلب هم مثل مطلب قبلی حجم خوبی از خاطرات من رو شاهد بودید. کل حرفی که میخواستم بزنم این بود که دوستان، از تجربه کردن و حتی شاخه شاخه پریدن؛ نترسید. این پرشها به خودی خود باعث میشن که شما در کارتون – حتی کارهای فریلنسری و پروژهای – به شدت موفقتر عمل کنید. یادتون باشه که زندگی، فانتر از اونیه که بخواید با زیادی جدی گرفتن؛ خرابش کنید.
در دنیای امروزی، بخش بسیار بزرگی از بیزنس و همچنین توسعه نرمافزار مرتبط به توسعه عملیات (Dev Ops)، مدیریت سیستم (System Administration) و همچنین استقرار و یکپارچگی ادامهدار (CI/CD) میشه. شاید حتی مهمتر از اصل نرمافزار، رسیدگی به این موضوعات باشه. در این پست، قراره که با هم بررسی کنیم چطور میتونیم در پایان روز، به خودمون بگیم DevOps Engineer؟ و چه چیزایی باید بلد باشیم؟ 🙂
مدیریت سیستم یاد بگیرید
یادگیری مدیریت سیستم، بخش «عملیات» قضیه رو معمولا شامل میشه. پس لازمه که اینجا چیزایی رو بلد باشیم که معمولا در شرکتها و سازمانهای بزرگ بهشون نیاز میشه. اما قبل از اون، لازمه که یه چیزایی رو به صورت عمومی بلد باشیم. پس بیاید با هم بررسی کنیم که عمومیات دواپس شدن چیا هستن؟
یادگیری لینوکس. عموم شرکتها در دنیا در حال حاضر، سرورهای لینوکسی دارند. بلد بودن لینوکس، یک «باید» در یادگیری دواپس محسوب میشه. یادگیری لینوکس اصلا سخت نیست. کافیه یک توزیع خاص (مثل اوبونتو) رو نصب کنید و باهاش بازی کنید. کم کم دستتون میاد که چی به چیه. بعد از این ماجرا، میتونید یک سرور اجاره کنید و چیزایی که یاد گرفتید رو روش تست کنید.
آشنایی با وبسرورها. وبسرورها، نرمافزارهایی هستند که به شما امکان نمایش نرمافزار و محتوای تولیدی از طریق پروتکل HTTP رو میدن. در دنیای امروز اکثریت قریب به اتفاق کسب و کارهای کوچک و حتی بزرگ، از NGINX استفاده میکنن. پس بد نیست بعد از این که لینوکس یاد گرفتید، روی سرور یا ماشین مجازی لینوکسیتون یک وبسرور نصب کنید و سعی کنید یک صفحه استاتیک باهاش نمایش بدید.
آشنایی با شبکه. گرچه معمولا این مورد رو باید اول از همه بیاریم، اما من شخصا معتقدم که یادگیری لینوکس در بحث مدیریت سیستم به هرچیزی ارجحه. اما از این موضوع که بگذریم، چرا شبکه؟ شبکه پایه و اساس دواپسه. شما بدون بلد بودن شبکه، تقریبا هیچ کاری نمیتونید بکنید. اما چه حد شبکه بلد بودن خوبه؟ دقت کنید که اینجا قرار نیست ما نیروی آیتی یک سازمان باشیم، پس فقط کافیه که پایههای شبکه، آیپی و بعضی پروتکلهای مرسوم (SSH, FTP, HTTP, SMTP و …) رو بدونیم و بدونیم که هرکدوم چطور و کجا کار میکنند.
آشنایی با فایروال و تامین امنیت شبکه. فکر کنم عنوان خودش گویاست. در لینوکس، ما معمولا از iptables یا اینترفیسهایی که براش ساخته میشن (مثلا اوبونتو UFW و دبیان apparmor رو دارند) استفاده میکنیم. این خیلی مهمه که شما بعنوان مدیر سیستم، در جریان باشید که چه چیزایی از بیرون در دسترسه و این حجم از دسترسی، چقدر میتونه آسیبزا باشه.
موارد بالا، مواردی هستند که حتما باید بلد باشید. فرقی هم نمیکنه که جایی استخدام شدید یا اگر قراره بشید، ازتون خواستند بلد باشید یا نه. در واقع «باید»های مدیریت سیستم موارد بالان.
اما در بسیاری از شرکتها یک سری سناریو خاص وجود داره که اینها رو میتونیم با هم بررسی کنیم، گرچه قرار نیست همه موارد رو با هم یاد بگیریم، اما چیزایی که به نظرم ممکنه وجود داشته باشند رو در اینجا بررسی میکنم.
استفاده از یک ابر خصوصی به جای چندین سرور عمومی. این مورد، مورد خوب و امنیه. گذشته از این که باعث میشه خیلی از موارد (مثل دیتابیس و …) از بیرون در دسترس عموم قرار نگیرند، هزینهها رو هم پایین میاره. فقط حواستون باشه که در این مورد، معمولا چند چیز اتفاق میافته که باید بلد باشید:
استفاده از لود بالانسر : لود بالانسرهای مرسوم مثل haproxy میتونن نقطه شروع خوبی باشن. البته این هم در نظر داشته باشید که معمولا ارائهدهندگان سرویسهای ابری؛ خودشون هم لود بالانسینگ رو انجام میدن.
استفاده از سیستمهای مانیتورینگ : طبیعتا شما برای این که ببینید هرکجا چه اتفاقاتی میافته، نیاز به یک سیستم مانیتورینگ خوب دارید. در حال حاضر سرویسهایی مثل prometheus و zabbix وجود دارند. همچنین میتونید اینها رو به grafana و امثالهم متصل کنید و به شکل زیبایی، اونها رو ویژوالایز کنید.
استفاده از نرمافزارهای بیلد شده به صورت سفارشی. گرچه این مورد رو شخصا درک نمیکنم (چون نسبت به نرمافزاری که از کانال رسمی – مثل مخزنهای توزیع لینوکستون – نصب میکنید ممکنه امنیت و پایداری کمتری نشون بدن) اما برخی سازمانها ممکنه وبسرور، کامپایلر یا مفسر یا حتی کرنل رو خودشون از نو بیلد کرده باشن. پس یادتون باشه این مورد هم تا حدی یاد بگیرید که اگر نیاز به بیلد مجدد شد گیر نکنید 😁
در مورد مدیریت سیستم به قدر کافی یاد گرفتیم، دیگه چی میمونه؟ نظر من رو بخواید الان وقتشه که یک سری ابزار رو با هم بررسی کنیم. توجه کنید که ابزارهایی که در این بخش ازشون حرف میزنم، ابزارهایی هستند که خودم باهاشون تجربه کار دارم. فلذا اگر ابزاری از قلم افتاده، در بخش نظرات در مورد ابزارهای مورد نظر خودتون صحبت کنید. من خوشحال میشم 🙂
ابزارهایی که باید یاد بگیرید
وبسرور
گرچه این رو در بخش قبلی اشاره کردم، در اینجا میخوام صرفا کمی در مورد NGINX حرف بزنم. یادتون باشه که NGINX امروزه یک انتخاب خوبه چون:
در بسیاری از توزیعها، وجود داره. در حدی که خیلی از توزیعهای سروری رو وقتی نصب کنید؛ ممکنه همراهش نصب شده باشه.
پیکربندی به شدت سادهای داره (و خب کاش حداقل نیاز نبود ته هر خط پیکربندی شما یک سمیکالن بذاری)
ابزارهای جانبی بسیار خوبی مثل python3-certbot-nginx براش ساخته شده که امکان SSL و … گرفتن برای دامنه خاص و زیردامنهها و … رو به شدت ساده میکنه.
تقریبا برای هرکاری یه آموزشی ازش هست!
ابزارهای CI/CD
خب ابزارهای CI/CD چی هستند؟ به صورت کلی، این ابزارها اینجان که کار استقرار (Deploy) و یکپارچگی (Integration) هرآپدیت با نسخه قبلی رو اتوماتیک انجام میدن. ابزارهای زیادی برای این کار وجود دارند من جمله Travis CI, Jenkins و البته معروفترینشون Gitlab CI/CD (حداقل در ایران).
این ابزارها به این شکل عمل میکنن که یه سری فایل پیکربندی (در مورد گیتلب از نوع YML ) دریافت میکنند و اون رو بررسی میکنند. سپس مطابق اون، عملیات رو انجام میدند و نرمافزار شما رو مستقر میکنن. خوبی گیتلب در این زمینه اینه که به ازای هر بهروزرسانیای که شما انجام بدید، یک بار Pipeline اجرا میکنه و بروزرسانیها رو روی سرور مورد نظر اعمال میکنه. البته باقی ابزارها هم امکان اتصال به گیت رو دارند پس نگران نباشید.
ابزارهای مانیتورینگ
طبیعتا بالا بودن یا نبودن سرویسها، دیتابیس، سرویسهایی که از بیرون دریافت میکنیم و یکپارچگی داریم باهاشون، مهمن. همینطور ظرفیتی که در دیسک و حافظه و … اشغال شده هم مهمه که دونسته بشه. فلذا اینجا لازمه که ابزاری باشه که اینجا بیاد و این رو برای ما چک کنه.
این ابزار معمولا چیه؟ خب ابزارهای زیادی براش هست و من تجربهم استفاده از prometheus بوده. پرومتئوس یک سری ابزار خاص داره که بهش میگن exporter. شما روی هر قسمتی که نیاز دارید (مثلا nginx یا خود سرور که بهش میگن node یا هرچیزی از این قبیل) یک اکسپورتر نصب کنید و نتایج آنالیزها رو اینجا ببینید.
همچنین نتایج معمولا روی پرمتئوس زیبا نیستن، به همین خاطر شما میتونید یک ابزار بهتر مثل Grafana نصب کنید و نتیجه رو به شکل قشنگی visualize کنید. همچنین میتونید روی هرکدوم یک سیستم alerting ست کنید که از روشهای مختلفی مثل پیامک، ایمیل یا حتی پیام در اسلک بهتون هشدار بده که کجا چی درست نیست.
ابزارهای ذخیرهسازی
خب، این هم یه چیزی که شاید کمتر ازش با خبر بوده باشید :). در دنیای امروز تقریبا کسی نیست که رو همون سروری که نرمافزارش هست، فایل ذخیره کنه. پس چی کار میکنن؟ هیچی، اونجاهایی که جزء دنیا حساب میشن؛ معمولا از Amazon AWS استفاده میکنن و پارتیشن S3 دریافت میکنن. S3 یعنی Simple Storage Solution (سه تا S) و خب این حقیقت وجود داره که راهکار بهتریه. چرا؟ چون شما برای ذخیرهسازی صرفا هارد نیاز داری و نه پردازنده یا رم زیاد.
اما نگران نباشید، اگر به هر دلیلی دسترسی به AWS ندارید، میتونید در همین ایران از ابزارهایی مثل ابرآروان و پشتیبان هم استفاده کنید. فقط کافیه که یاد بگیرید که چطور نرمافزار رو با S3 یکپارچه کنید (اینجا اهمیت این ماجرا که مهندس دواپس نیازمند اینه که دانش برنامهنویسی داشته باشه مشخص میشه) و دستورالعملهای لازم رو به توسعهدهندهها بدید؛ یا این که اصلا خودتون کدبیس رو درک کنید و این یکپارچهسازی رو انجام بدید.
یک راه دیگه هم داشتن سرور با حجم بالای هارددیسک (در ابعاد ترابایت) میتونه باشه. بعد از اون شما نیاز دارید تا یک نمونه S3 روی اون مستقر کنید. برای این کار میتونید از ابزاری مثل minio بهره بگیرید.
ابزارهای ارکستراسیون
ابزارهای ارکستراسیون چی هستند؟ ارکستر در موسیقی، به معنای «گروهی از نوازندگان»ــه. یعنی یک گروهی که مثلا دو نفر ویولن میزنن، یک نفر ویولا و یک نفر چلو. در دواپس ارکستر به مجموعهای از سرورها یا شبکهها گفته میشه که یک کار انجام میدن. تا حالا دقت کردید چطوریه که شما سرعت کارتون با توییتر در آلمان با سرعت کارتون با توییتر در آمریکا یکیه؟ یا مثلا چطوریه که شما از ایران یک عکس رو پست میکنید و مثلا خاله شما در آمریکای شمالی اون رو لایک میکنه؟!
علتش اینه که این نرمافزارها به عبارتی Orchestrate میشن (فارغ از بحث CDN و …) یعنی از یک نرمافزار و همچنین دیتابیسشون (البته دیتابیس Cache و نه دیتابیسهای اصلی) بیش از یک نمونه در حال اجراست. برای شما سوال نشده که اینا چطور هندل میشن؟ خب جواب اینه که ابزارهای ارکستراسیون استفاده میشه.
از بین این ابزارها میشه به Docker Swarm و Kubernetes و Ansible اشاره کرد. طبق تجربه با Ansible به شما بگم که شما تنظیماتی که نیاز دارید رو مشابه CI/CD در یک سری فایل پیکربندی (انسیبل بهشون میگه استوری) مینویسید و مجموعهای از استوریها رو در یک namespace قرار میدید. مثلا فرض کنید همین وبلاگ کجاها قراره باشه، من یه namespace به اسم haghiri75 میسازم و اطلاعات استقرار رو بهش میدم.
با ابزارهای ارکستراسیون، آمادهسازی و پیادهسازی سناریوهای سرور و یا ابر خصوصی به شدت سادهتر و سریعتر خواهد شد.
بسیار عالی، این بخش هم تمام شد. یک بخش کوچک هم مونده که اون هم میخونیم و بعدش این دفتر هم به پایان میرسونم. تا اینجا اگر خوندید، یکم به خودتون استراحت بدید. بعد بخش بعدی رو بخونید و یادتون نره که این مطلب رو با دوستانتون به اشتراک بذارید.
برنامهنویسی یاد بگیرید
بسیار خوب، در این بخش که در واقع بخش پایانی این مطلب در مورد اینه که چطور DevOps بشیم، لازمه اشاره کنم به این که نیاز دارید برنامهنویسی بلد باشید. حالا به چه زبونی و در چه حد؟ اینها مهمن. خب در این قسمت یکم در مورد زبانهایی که «باید» بلد باشید صحبت میکنم و بعد از اون هم راهنمایی میدم در مورد زبانهایی که احتمالا در جریان کار مجبورید باهاشون کار کنید.
پایتون، از چیزایی که باید بلد باشید!
چرا پایتون؟ خب پایتون این روزها طوریه که شما حتی مهندس کامپیوتر یا توسعهدهنده هم نباشی احتمالا دوست داری یادش بگیری و خیلیها کم و بیش پایتون رو بلدند. اما چرا بعنوان یک مهندس دواپس باید پایتون بلد باشیم؟
بر خلاف گذشته که خیلی از پیکربندیهای سرور با پرل انجام میشد، سالهاست که توزیعهای مطرح لینوکس مثل اوبونتو، ردهت، دبیان، سنتاواس و … دارند میرن سمت پایتون. پس به نوعی شما زبانی رو یاد گرفتید که برای پیکربندی سرور داره استفاده میشه و عملا ضرری نکردید.
ابزارهای مانیتورینگ و همچنین پنلهایی که براشون ساخته شده هم معمولا پایتونی هستند. حداقل گرافانا که با پایتون نوشته شده و دونستن پایتون میتونه در بهبود کارکرد این قضیه به شما کمک بده.
احتمال خوبی هم وجود داره که نرمافزاری که میدن به شما تا مستقر کنید هم پایتونی باشه، فلذا پیادهسازی بخش دواپسی قضیه هم میتونه براتون سادهتر باشه.
و در نهایت؛ شما ممکنه ابزاری نیاز داشته باشید که موجود نباشه. پس خودتون باید پیادهش کنید. با پایتون این قضیه به شدت سریع اتفاق میافته.
یک زبان سیستمی
زبانهای سیستمی، زبانهای برنامهنویسی هستند که برای توسعه ابزارهای سیستمعامل استفاده میشن، برای تعامل با سختافزار پرفرمنس بهتری دارند و در نهایت برای ایجاد ابزارهای زیرساختی مناسبترند. اینجا نمیخوام شما رو به یادگیری اسمبلی تشویق کنم، بلکه ازتون خواهش میکنم همیشه نیمنگاهی به زبانهایی مثل Rust یا Go داشته باشید (و در نظر بگیرید که Go حتی در بکند هم استفاده میشه فلذا یادگیریش خالی از لطف نیست!).
زبانی که سازمان ازش استفاده میکنه
این هم نیاز به گفتن نداره. شما نیاز دارید تا کدبیس رو یاد بگیرید و درکش کنید. حداقل وقتی که قراره دواپسیجات رو روی کد اعمال کنید این مهم خودش رو نشون میده. نگران هم نباشید، معمولا DevOps درگیری به شدت کمتری با کدبیس مستقیم درگیر میشه. پس اگر حس و حال کار تو تیم توسعهدهندهها رو ندارید نگران این مورد هم نباشید :))
خب این دفتر هم به پایان رسوندم. جا داره در انتها، یک نکته خیلی مهم رو عارض بشم خدمت شما. سعی من کلا بر این بود که مطلبم خیلی مرتبط به یک دوران خاص از تاریخ نباشه و مثلا ۳ سال بعد هم قابل استفاده باشه. همچنین، این رو یادتون باشه که این مطالبی که در اینترنت موجودند، معمولا تجربیات شخصی هستند.
شخصا معتقدم تجربیات ارزشمندن، اما یه نکته مهم اینه که تجربهها یکسان نیستند. مثل همین مطلب، مطلبیه که من طی تجربه خودم بهش رسیدم و ممکنه شما مسیر متفاوتی رو در سفرتون به دنیای دواپس طی کرده باشید. به همین خاطر هم کل مطلب رو در یک جمله خلاصه میکنم که «فرمول کلی برای دواپس شدن وجود نداره».
امیدوارم مطلب مفیدی بوده باشه، در نهایت هم سال نوتون پیشاپیش مبارک 🙂
ساخت توزیع لینوکس از جمله کارهاییه که معمولا وقتی کسی وارد دنیای لینوکس میشه دوست داره تجربهش کنه. چرا؟ چون فکر میکنه افراد قبلی که این کار رو کردند، آدمهای خفنی بودن (که تفکر غلطی هم نیست) و فکر میکنند اگر دست کم یک توزیع بسازن آدم خفنی میشن (که تفکر غلطیه).
حالا آیا واقعا آدم خفنی میشیم اگر یک توزیع بسازیم؟ خیر. اما به ما در جهت پیشرفت و خفن شدن کمک میکنه. میپرسید چطوری؟ در جریان ساخت توزیع لینوکس شما با زیر و بم این سیستمعامل آشنا میشید و میفهمید ابزارهای مختلف چطور کار میکنند. این روش، یکی از بهترین روشهای یادگیری لینوکس و حتی سیستمعامله.
فکر کنم پیشتر به قدر کافی در مورد این که چند راه برای ساخت توزیع داریم حرف زدم. در این پست منتها قصد اینه که یک دبیان یا اوبونتویی که از پیش روی سیستم خودمون (یا ماشین مجازی) نصب شده رو به یک ISO زنده تبدیل کنیم.
نصب و پیکربندی دبیان یا اوبونتو
در قدم اول، شما نیاز دارید که دبیان یا اوبونتو رو روی سیستم خودتون یا ماشین مجازی نصب کنید. توصیه شخصی من اینه که در دیسک یا پارتیشن جدایی نصب کنید. چرا؟ چون ما محدودیتهایی در ISO داریم. عموم ISO هایی که از توزیعهای مختلف لینوکس ساخته میشن، استانداردشون iso9660 عه که یک محدودیت ۴ گیگابایتی داره. پس باید حواسمون به این موضوع هم باشه.
بعد از نصب (نصب دبیان و اوبونتو خیلی سادهست : نکست نکست نکست …)، نیازه که این بستهها حتما نصب بشن:
این بستهها شامل یک سری ابزار دم دستی برای مدیریت فایلسیستم و … هستند. حجم زیادی هم ندارند. البته، git که معرف حضور هست برای چی استفاده میشه و خب ما قراره باهاش یه سری چیزا رو از گیتهاب/گیتلب دریافت کنیم.
همچنین، بعد از نصب بستههای بالا، مطمئن بشید که rsync هم در سیستم نصب شده. این بسته معمولا در توزیعهای لینوکسی نصبه، اما اگر نبود هم خطری نداره. میتونید نصبش کنید.
شخصیسازی
خب در بحث شخصی سازی ما سناریوهای مختلفی داریم. در حال حاضر، قصد ورود به بخشهایی مثل تغییر لوگو و … ندارم. اما مثلا شخصی سازی میزکار کجاست؟!
شما اگر دستور زیر رو اجرا کنید:
~:$ ls -a ~
یک سری فایل و فولدر میبینید که با نقطه شروع شدند. اینها اسمشون «نقطهپرونده» یا «داتفایل»ـه. معمولا پیکربندیها اینجان. این پیکربندیها، تنظیمات پوسته، میزکار و … رو شامل میشن.
خب، حالا که در مورد اینها میدونیم با خیال راحت شخصیسازیمون رو انجام میدیم. بعدش با این دستور، پیکربندیهامون رو آماده انتقال به کاربران دیگر میکنیم :
حواستون باشه که یک سری تنظیماتی مثل gnome-keyring در پوشه local هست که باید حذف کنید بعد انتقال.
حالا این skel چیه که انقدر مهمه؟ skel کوتاهشده skeleton عه. در واقع اسکلت کاربرا رو اینجا نگه میداریم. بعد از این که با useradd یا adduser یک کاربر جدید ایجاد کنیم، محتویات این پوشه رو برمیداره میبره میذاره در پوشه خانگی اون کاربر.
به عبارتی فرض کنید که یک سری الگو و نقشه از دکوراسیون خونه داریم، وقتی کسی از ما یه واحد میخره همون الگو رو میبریم در واحدش پیادهسازی میکنیم.
باقی شخصیسازیها هم بیشتر به نصب نرمافزار و … مربوط میشن. گرچه در مورد لوگو و … توضیح زیادی ندادم اما یک تقلبی به شما میرسونم. اگر از دبیان استفاده میکنید، دنبال desktop-base بگردید و اونجا خرابکاری کنید 😁 البته راههای تغییر ظاهر سیستمهای لینوکسی به اندازه راههای رسیدن به خداست، با کمی جست و جو و پرسشگری میتونید به نتیجههای بسیار خوبی برسید.
اسکریپت ساخت دیسک زنده
مدتها پیش در جریان ساخت کاپریس لینوکس (لینک) برای تهیه ایزوی نهایی، یک اسکریپتی نوشتم. این اسکریپت بعدها در ساخت سیستمعامل سانا (لینک) هم استفاده شد. در واقع، این اسکریپت تلاشی برای زنده کردن ابزارهایی مثل remastersys و relinux بود که در دوران قدیم (حوالی سال ۴۲) برای ساخت ایزوی زنده از یک سیستم لینوکسی استفاده میشد.
این اسکریپت رو به این شکل از گیتهاب دریافت میکنیم :
که به این شکل، پوشهای به اسم custom_live برای شما ساخته میشه که حاوی اسکریپت و متعلقاتش (مثل تنظیمات گراب و syslinux) میشه. الان، ما آمادهایم که دیسک زنده بسازیم!
ساخت دیسک زنده
حالا، ما مقدمات ساخت دیسک رو داریم و وقتشه که دیسک رو بسازیم. ابتدا، این دستورات رو اجرا میکنیم :
~:$ cd custom_live
~/custom_live:$ mkdir chroot
با دستور اول وارد پوشه custom_live میشیم و با دستور دوم یک فولدر خالی به اسم chroot ایجاد میکنیم. حالا وقتشه که از rsync عزیزمون استفاده کنیم برای انتقال سیستم نصب شده به این فولدر:
خب حالا وقتشه که با یک دستور جدید به اسم chroot آشنا شیم. این دستور، کارش ارسال یک سیگنال از پردازندهست که دایرکتوری ریشه رو به دایرکتوری مورد نظر ما تغییر بده. البته شرایط خاصی هم داره، مثلا این که سیستمعامل هر دو جا، یکی باشه. معماری یکی باشه و قص علی هذا.
با دستور chroot دایرکتوری root رو به chroot ای که ساختیم تغییر میدیم:
~/custom_live:$ sudo chroot chroot/
و حالا باید یک سری تغییراتی هم اینجا اعمال کنیم. این تغییرات شامل چیان؟ اول از همه دسترسی به اینترنت رو باید به قولی «یارو» کنیم. چطوری یارو کنیم؟ به این شکل :
حالا لازمه یه سری بسته نصب کنیم. البته در حقیقت، چون ما از سیستم نصبشده استفاده کردیم، نیازی نیست تعداد زیادی بسته نصب کنیم و فقط یکیش کافیه :
# apt update
# apt install live-boot
بسته live-boot ماژولهای مورد نیاز کرنل برای بوت شدن به صورت زنده رو هم بهش اضافه میکنه. در واقع به کرنل میگه که «من ازت میخوام به صورت زنده هم بتونی بوت بشی».
بعد از اضافه کردن این بسته، نوبتی هم باشه نوبت اینه که کَش apt رو پاک کنیم و یک کاربر به سیستم اضافه کنیم. به این شکل:
# apt clean
# adduser live
بعد از این که کاربر رو اضافه کردیم، لازمه که لاگین اتوماتیک رو به lightdm و یا gdm (بسته به میزکار، توزیع مبدا و … ممکنه این قضیه فرق کنه) اضافه کنیم. از اونجا که این مطلب یه آموزش عمومیه، این قسمت رو بر عهده شما میذارم.
پس از این، لازمه دسترسی sudo هم به کاربر لایو بدیم :
تذکر مهم: این روش به شدت ناامنه و فقط برای دیسک زنده پاسخگوعه. اگر قراره دیسکتون قابل نصب باشه، حتما در تنظیمات نصاب لحاظ کنید که به صورت NOPASSWD کاربر رو نسازه. البته، نصابهای مطرح معمولا این موارد رو با سوال و جواب لحاظ میکنند.
خب، کافیه که الان با تایپ exit و فشردن کلید اینتر از محیط chroot خارج شیم. یه سری پیکربندی ریز مونده که باید انجام بدیم. این پیکربندیهای ریز در دبیان و اوبونتو متفاوتن ولی تفاوت اونقدری بزرگ نیست. در ادامه با هم میبینیم که چه تفاوتیه.
خب، همونطور که میدونید سیستمعامل برای بوت شدنش نیازمند کرنله. کرنل سیستمعامل و یک initial ram disk برای بوت شدن دیسک زنده نیازه. حالا اینا رو از کجا بیاریم؟ سادهست. از chroot مون میاریم.
در دبیان
خب در دبیان این قضیه راحته. به این شکل فایلا رو کپی میکنیم :
و بعد چند دقیقه ایزوی شما آمادهست. ایزویی که ساختید رو میتونید حالا با استفاده از qemu یا ویرچوالباکس و … تست کنید.
جمعبندی
همونطوری که دیدید، این کار گرچه از شما یه متخصص خفن نمیسازه، به شما یک دید بسیار بسیار خوب از کلیت قضیه ساخت توزیع میده. شاید باورتون نشه ولی خیلی از توزیعهای مطرح امروزی مثل مینت، المنتری و …؛ از همین جاها شروع کردند و این راه شروع خوبی برای یادگیری لینوکس و سیستمعامله.
امیدوارم مطلب، مطلب مفیدی بوده باشه. دوست دارم بدونم وقتی شما با استفاده از این مطلب توزیع خودتون رو میسازید، چه خلاقیتهایی به خرج میدید.
وبلاگ شخصی محمدرضا حقیری، برنامهنویس، گیک و یک شخص خوشحال