بسیاری از نرمافزارهای متن باز که در GitHub برای استفادهی عموم قرار داده شده، فایل باینری و در واقع کامپایل شده و آمادهی اجرا کردن ندارند بلکه کاربر میبایست سورس را دریافت کرده و با نصب کردن ملزومات، فایل اجرای برنامه را بسازد. اصطلاح Clone و Build به همین مسأله اشاره میکند.
در این مقاله میخواهیم با مفهوم Git و GitHub آشنا شویم و روش دانلود یک کپی از سورس برنامهها و ساخت فایل اجرای برنامه را در توزیعات Linux بررسی کنیم. حتی اگر مبتدی هستید، میتوانید این کار را به سادگی انجام بدهید. با ما باشید تا مراحل کار را با جزئیات کامل را بررسی کنیم.
آشنایی با Source و معنی متن باز بودن برنامه
یک نرمافزار یا اپلیکیشن، در حقیقت مجموعهای از دستورات است که به شکل متن ساده نوشته شده و البته قابل ویرایش و ذخیره کردن به همین صورت است. نرمافزاری به نام Compiler یا مفسر، فایلهای حاوی دستورات را بررسی میکند و فایل اجرایی میسازد. فایلهای دستورات را Source Code یا سورس برنامه میگویند.
منظور از Open Source یا متن باز بودن یک نرمافزار این است که دستورات آن در دسترس عموم است و در واقع کاربر میتواند به راحتی بخشی از برنامه را تغییر بدهد و آن را کامپایل کند. در این صورت نسخهای از برنامه را میسازد که سفارشی و مناسب با سلیقه و نیاز وی است.
اغلب نرمافزارهای مکاواس یا ویندوز، متن باز نیستند و در واقع شرکت یا شخصی که نرمافزار را تولید کرده، کد منبع یا سورس را به صورت عمومی منتشر نکرده است. بنابراین تغییر دادن نرمافزار یا غیرممکن و یا بسیار مشکل است اما در مقابل در دنیای لینوکس، نرمافزارهای متن باز و کاملاً رایگان، بسیار متداول هستند.
معرفی Git، نرمافزاری برای کنترل ورژنها
مجموعهای از فایلهای حاوی دستورات در یک پروژه را پایگاه کد یا Codebase میگویند. در پروژههای برنامهنویسی بزرگ که طبعاً تعداد زیادی برنامهنویس با هم یا مستقل از دیگران روی دستورات کار میکنند، میبایست تغییرات کدها رهگیری و مشخص شود. میبایست نسخههای قبلی نیز نگهداری شود چرا که گاهی لازم است اشتباهی تصحیح شود یا حالت قبلی برخی از دستورات در کدها جایگزین شود. اگر چند برنامهنویس بخشی از یک فایل سورس را تغییر بدهند، میبایست تغییرات ترکیب شود.
برای تمام نیازهای فوق به نرمافزاری نیاز داریم که ورژنها را کنترل کند. یکی از نرمافزارهای Version Control بسیار معروف، گیت است.
شخصی به اسم Linus Torvalds که هستهی لینوکس را خلق کرده، سالها پیش نرمافزاری به اسم Git را به منظور کنترل ورژن کرنل یا هستهی لینوکس را نیز معرفی کرده است. در حال حاضر Git محبوبترین نرمافزار کنترل ورژن در جهان است و میلیونها کاربر از آن استفاده میکنند اما نه صرفاً برای توسعهی هستهی لینوکس.
با استفاده از گیت در حقیقت Codebase یا پایگاه کد یک پروژه در مخازن نرمافزاری ذخیره میشود. مخزن یا Repository که ریپازیتِری تلفظ میشود، در حقیقت سروری که این فایلها را میزبانی میکند. البته هر برنامهنویس میتواند نسخهای از فایلهای یک پروژه را روی کامپیوتر خویش نیز داشته باشد و برای تغییر نرمافزار و ساخت فایل اجرایی از آن استفاده کند. کامپیوتر Server میتواند یکی از کامپیوترهای شبکهی محلی باشد که کاربرد عمومی ندارد اما مخازن آنلاین که سرورهای تحت وب است هم وجود دارد و GitHub هم یکی از این مخازن عظیم است.
گیتهاب، پایگاه عظیم نرمافزارهای متن باز
همانطور که توضیح دادیم، GitHub پس از موفقیت و محبوبیت Git شکل گرفته و یک مخزن عظیم است. در واقع بنیانگذار گیتهاب به این نتیجه رسیده بود که توسعهدهندگان نرمافزار به سایتی نیاز دارند که از فایلهای پروژههای ایشان میزبانی کند و استفادهی عمومی از سورس کد پروژهها را ساده کند.
جالب است بدانید که GitHub در سال ۲۰۱۹ بیش از ۱۰۰ میلیون مخزن نرمافزاری را میزبانی میکند! در واقع اگر بدانید که یک نرمافزار از نوع متن باز است، احتمالاً سورس آن را در گیتهاب پیدا خواهید کرد چرا که اغلب توسعهدهندگان از گیتهاب برای میزبانی مخزن نرمافزار استفاده میکنند. موارد معروف دیگر، BitBucket و GitLab است که هیچ یک به اندازهی گیتهاب محبوب و گسترده نیست.
ساختار یک مخزن نرمافزاری در گیتهاب
در گیتها یک مخزن نرمافزاری یا ریپازیتری، از تعدادی فولدر تشکیل میشود که در هر یک تعدادی فایل و به خصوص فایلهای سورس برنامه وجود دارد. البته انواع و اقسام فایل در مخزن نرمافزاری موجود است. برخی فایلها از نوع داکیومنت هستند و برخی دیگر Manual یا راهنما یا man page محسوب میشوند. برخی شامل لایسنس فایلهای استفاده شده مربوط به سایر نرمافزارها هستند. برخی از فایلها دستورالعمل کامپایل و ساخت برنامه و اسکریپتهای Shell را نگهداری میکنند.
قانون و قاعدهی خاصی برای مخازن نرمافزاری و فایلهایی که باید در آن وجود داشته باشد، تدوین نشده است و تنوع ساختاری زیاد است.
فایل Readme و نحوه ساخت نرمافزار از سورس آن
فایلی به اسم Read Me یا مرا بخوان! معمولاً فایل مهمی در مخزن نرمافزاری است. البته ممکن است نام آن با حروف بزرگ و کوچک نوشته شود، مثل ReadMe یا README و یا readme. احتمالاً پسوند آن نیز md است که البته همیشه اینطور نیست.
به عنوان مثال اگر به مخزن نرمافزاری Atom Editor مراجعه کنید، لیستی از فایل و فولدرها موجود است و یکی از فایلها نیز README.md نام دارد. نکتهی مهم این است که گیتهاب به صورت خودکار محتویات فایل readme را در صفحهی آغازین یا Front Page یک مخزن نرمافزاری قرار میدهد تا همگان در صورت مراجعه، آن را رویت کنند. در این فایل از زبان مارکآپ استفاده شده تا توسعهدهندهی نرمافزار بتواند صفحهی آغازین را با هدینگها، پاراگرافها و بلوکهای متنی با استایل مختلف ایجاد کند. لذا این فایل خاص معمولاً یک فایل متنی ساده نیست. همانطور که در تصویر زیر مشاهده میکنید استفاده از لیست موارد، لینک و هدینگ امکانپذیر است.
معمولاً در فایلهای readme به مواردی مثل موضوع پروژه، متصدی پروژه، نوع لایسنس، شیوهی مشارکت در پروژه و روش بیلد کردن و اجرای نرمافزار اشاره میشود. البته ممکن است دستورالعمل کامپایل کردن نرمافزار را در این فایل مشاهده نکنید اما در این صورت هم روش کسب اطلاعات لازم در این مورد، ذکر میشود.
پس از مراجعه به گیتهاب و پیدا کردن یک برنامه، میبایست حتماً به فایل readme.md اصلی آن نگاهی بیاندازید. گاهی اطلاعات موردنیاز شما در آینده، در همین فایل وجود دارد و به علت نادیده گرفتن و عدم دقت، سردرگم میشوید.
اما به موضوع اصلی مقاله میرسیم: نحوهی ایجاد نسخهی کپی مخزن نرمافزاری که Clone کردن گفته میشود و سپس کامپایل یا Build کردن برنامه. روش کار را با بررسی یک مثال که نرمافزار متن باز Atom Editor است، توضیح میدهیم.
در این پروژهی کوچک، تعداد فایل و فولدرها نسبتاً کم است. فایل ReadMe نیز مختصر و مفید نوشته شده است. در این فایل بخشی با عنوان Development یا توسعه وجود دارد که در آن بخشی با عنوان building from source به معنی ساخت از سورس، وجود دارد. این بخش بسیار مهم است و روش کامپایل کردن نرمافزار اتم ادیتور را توضیح میدهد. در واقع اطلاعات موردنیاز در صفحهی boxes.thomasjensen.com/build.html موجود است.
وابستگیها و نرمافزارهای موردنیاز برای ساخت برنامه
در راهنمای ساخت برنامه از سورس، ممکن است بخشهایی با عنوان Building on Linux و Building on Windows وجود داشته باشد و روش ساخت نرمافزار در سیستم عاملهای مختلف توضیح داده شده باشد. در مورد اتم ادیتور، به این نکته اشاره شده که میبایست C compiler و Bison و Flex نصب شده باشد. در واقع این برنامهها را وابستگیها، ملزومات یا Dependencies میگویند.
البته دقت کنید که به جز ۳ اپلیکیشن موردبحث، اپلیکیشن اصلی که Git است هم موردنیاز است و در واقع عمل کپی کردن مخزن نرمافزار یا کلون کردن، به کمک آن آنجام میشود.
در ادامه دستورات موردنیاز برای کامپایل کردن Atom Editor را در توزیعات Ubuntu و Fedora و Manjaro بررسی میکنیم که هیچ یک از این سه مورد، هر ۴ اپلیکیشن موردبحث را به صورت پیشفرض شامل نمیشوند و باید این موارد را دانلود و نصب کرد و سپس کامپایل کردن را آغاز کرد.
نصب کردن Git و Flex و Bison و GCC
برای نصب کردن برنامههای موردنیاز از دستوراتی در محیط Terminal استفاده کنید که روش ساده و سریعی است. لذا ابتدا اپلیکیشن ترمینال را اجرا کنید.
برای نصب کردن گیت از دستور زیر استفاده کنید:
و در مورد flex هم دستور زیر را اجرا کنید:
و دستور بعدی هم bison را نصب میکند:
در نهایت به make نیاز داریم که با فرمان زیر نصب میشود:
در لینوکس فدورا هم دستورات زیر را اجرا کنید تا ملزومات ساخت Atom Editor نصب شود:
در Manjaro میبایست کامپایلر C یا به عبارت دیگر GCC را هم نصب کنید. دستورات موردنیاز به صورت زیر است:
کلون کردن ریپازیتری
هر ریپازیتری گیتهاب یک آدرس اینترنتی یا به عبارتی URL خاص دارد که برای کلون کردن یا کپی کردن مخزن نرمافزاری از طریق ابزار Git مورداستفاده قرار میگیرد. برای دسترسی به این آدرس خاص، روی دکمهی سبز Clone or download در بالای صفحهی اصلی مخزن نرمافزاری کلیک کنید.
اگر بخواهید فایل زیپ حاوی تمام فایلهای مخزن نرمافزاری را دانلود کنید، میتوانید از گزینهی Download ZIP استفاده کنید اما برای کار با ابزار گیت، میبایست لینک موجود در کادر را کپی کنید. برای این کار بهتر است روی دکمهی کپی کردن آدرس در کنار فیلد آدرس کلیک کنید.
آدرسی که باید به ابزار git بدهید، آدرس صفحهی باز شده است.
و اما مراحل بعدی: ابتدا فولدر کاری را با دستور CD به فولدری که میخواهید فایلهای مخزن نرمافزار را در آن کپی کنید، تغییر بدهید.
سپس دستور زیر git clone را تایپ کنید و سپس آدرس کپی شده را پیست کنید که البته در همهی اپلیکیشنهای ترمینال، پشتیبانی نمیشود. اگر پیست کردن پشتیبانی نشود، میبایست آدرس را به روش دستی تایپ کنید.
در ترمینال GNOME میتوانید از Ctrl + Shift + V برای پیست کردن آدرس کپی شده از گیتهاب استفاده کنید.
همانطور که در تصویر زیر مشاهده میکنید، کپی کردن فایلها در کامپیوتر آغاز میشود و پیام تکمیل کار نمایش داده میشود.
فایلها در فولدری به اسم boxes قرار گرفته است. میتوانید این فولدر را باز کنید و با فرمان ls، فایلهای موجود را لیست کنید.
کامپایل و ساخت اپلیکیشن
ساخت اپلیکیشن را با توجه به دستورالعمل موجود در ریپازیتری گیتهاب دنبال کنید. ممکن است فایل Shell حاوی دستورات لازم برای دانلود قرار داده شده باشد و ممکن است صرفاً دستورات لازم ذکر شده باشد.
در مورد اتم ادیتور، از ابزار make استفاده میشود. این ابزار در حقیقت دستوراتی را از یک فایل makefile میخواند و اجرا میکند. البته دو بار از فرمان make استفاده میشود که بار اول برای کامپایل کردن برنامه است و بار دوم برای انجام تعدادی تست است.
با فرمان زیر، اپلیکیشن اتم ادیتور ساخته و سپس تست میشود. در واقع دو فرمان با && به صورت پشتسرهم در یک خط قرار گرفتهاند:
حین اجرای فرآیند، در محیط ترمینال تعداد زیادی دستور اجرا میشود و خطوط زیادی از اطلاعات و دستورات نمایش داده میشود. بسته به پیچیدگی اپلیکیشن و حجم دستورات لازم برای کامپایل کردن آن، فرآیند ممکن است طولانی شود.
Deploying the boxes Application
اکنون اپلیکیشن ساخته شده است و میبایست با اجرا کردن فایل باینری آن، برنامه را اجرا کرد. مسیری که فایل باینری یا در واقع فایل اجرای اپ در آن ذخیره میشود، همان فولدر کاری است اما باید این فایل را در فولدر /usr/bin کپی کنیم و کنار فایل اجرایی دیگر برنامهها قرار دهیم تا همواره حین کار با ترمینال، بتوان با تایپ کردن نام فایل باینری، از اپلیکیشن استفاده کرد. اگر این کار را انجام ندهید، هر بار باید فولدر کاری را با دستور CD به محلی که فایل باینری ساخته شده موجود است، تغییر بدهید که طبعاً روش خوبی نیست و وقتگیر است.
دقت کنید که در مورد برخی برنامهها، میبایست علاوه بر فایل باینری، فایلهایی مثل راهنما و پیکربندی و غیره را نیز کپی کنید. این موارد در راهنمای کامپایل کردن اپلیکیشن ذکر میشود.
برای انتقال فایلها و فایل باینری، دستورات زیر را با دسترسی روت و در واقع استفاده از sudo اجرا کنید. دستور اول برای جابجا کردن فایل راهنما یا man page کاربرد دارد:
و فرمان بعدی فایل پیکربندی را در فولدر /usr/share/ کپی میکند:
در نهایت فایل باینری در فولدر /user/bin کپی میشود:
اکنون اپلیکیشن Boxes که کامپایل و منتقل کردهاید را تست کنید. به عنوان مثال برای باز کردن دستورات راهنمای آن، فرمان زیر را اجرا کنید:
همانطور که مشاهده میکنید تمام سوییچهای قابل استفاده حین کار با فرمان boxes و توضیحاتی کوتاه در مورد آن در ترمینال نمایان میشود و به نظر میرسد که مشکلی وجود ندارد.
برای خروج از صفحات Manual میتوانید کلید Q را فشار دهید. اکنون فرمان دیگری را اجرا کنید:
و پاسخ زیر دریافت میشود که صحیح است:
آشنایی با دستور boxes
اگر با دستور boxed آشنایی ندارید، توجه کنید که این فرمان برای نوشتن متن در کادرهای متنوع و البته در محیط ترمینال به کار میرود. میتوانید پس از سوییچ -d نام فریم موردنظر را بنویسید تا کادر دور متن تغییر کند. به عنوان مثال اگر دو فرمان زیر را اجرا کنید:
نتیجه به شکلهای زیر خواهد بود:
برای لیست کردن تمام طرحهای موجود، دستور زیر را اجرا کنید:
در این مقاله مراحل کامپایل کردن برنامههای لینوکس که سورس برنامه در گیتهاب در اختیار عموم قرار گرفته را به صورت کامل بررسی کردیم و به اصطلاح از سیر تا پیاز را توضیح دادیم. روش کار بسته به اپلیکیشن موردنیاز شما متفاوت است و به علاوه در GitHub میتوانید سورس نرمافزارهای متن باز مخصوص ویندوز یا مکاواس را هم پیدا کنید.
howtogeekسیارهی آیتی