منبع اصلی نوشتار زیر در این لینک قرار دارد

ساخت بسته دبیان

<p>توزیع‌هایی که پایه دبیان دارند از بسته‌های دبیان با پسوند <code class="highlighter-rouge">.deb</code> استفاده می‌کنند.</p> <p>روش‌های مختلفی برای ساخت بسته دبیان از یک برنامه وجود دارد. برخی روش‌ها به سادگی از فایل اجرایی برنامه، یک بسته باینری دبیان را تولید می‌کنند اما بسته باینری فقط برای رفع نیاز خودمان کافی است و فایل‌ها و بسته‌های دیگری نیز باید تولید شود تا بتوان برنامه را در مخزن (repository) توزیع‌های لینوکس منتشر کرد. برای انتشار یک برنامه در مخازن توزیع‌های لینوکس باید سورس برنامه نیز عرضه شود.</p> <p>در اینجا روش پایه‌ای را می‌خواهیم دنبال کنیم که تمام فایل‌های مورد نیاز را برای ساخت بسته دبیان به ما می‌دهد که به آن ساخت بسته سورس دبیان (debian source package) می‌گویند. در این روش ما از سورس برنامه بسته را می‌سازیم (در مطلبی دیگر روش کوتاهی برای تولید بسته از فایل اجرایی را خواهیم گفت).</p> <p>در اینجا من یک برنامه آزمایشی می‌سازم و فرایند ساخت بسته را انجام می‌دهم تا با روش آن آشنا شویم.</p> <p>قبل از هر چیز ابزارهای مورد نیاز را نصب می‌کنیم.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>sudo apt-get install dh-make build-essential devscripts fakeroot debootstrap pbuilder </code></pre> </div> <p>سپس بر اساس نام برنامه و نسخه آن پوشه‌ای ایجاد می‌کنیم. مثلا linuxihaa-1.0</p> <p>اکنون درون پوشه یک فایل linuxihaa.c ایجاد می‌کنیم و برنامه ساده‌ای (که با اجرای آن متن Linuxihaa.IR نمایش داده می‌شود) درون آن می‌نویسیم.</p> <div class="language-c highlighter-rouge"><pre class="highlight"><code><span class="cp">#include &lt;stdio.h&gt; </span> <span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> <span class="n">printf</span><span class="p">(</span><span class="s">"Linuxihaa.IR</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </code></pre> </div> <p>این فایل اصلی برنامه ما است که با کمپایل آن می‌خواهیم فایل اجرایی linuxihaa تولید شود.</p> <p>اکنون دورن همان پوشه فایل Makefile را می‌سازیم.</p> <div class="language-make highlighter-rouge"><pre class="highlight"><code><span class="nv">DESTDIR</span><span class="o">=</span>/ <span class="nv">INSTALL_LOCATION</span><span class="o">=</span><span class="nv">$(DESTDIR)</span>/usr/ <span class="nl">all</span><span class="o">:</span> gcc linuxihaa.c -o linuxihaa <span class="nl">install</span><span class="o">:</span> mkdir -p <span class="nv">$(INSTALL_LOCATION)</span>/bin cp linuxihaa <span class="nv">$(INSTALL_LOCATION)</span>/bin <span class="nl">clean</span><span class="o">:</span> rm linuxihaa </code></pre> </div> <p>این فایل دارای سه بخش است که بخش all وظیفه کمپایل کدها را بر عهده دارد؛ بخش install دستوراتی است که جهت نصب برنامه (قرار دادن فایل اجرایی و دیگر فایل‌ها در جای مناسب) استفاده می‌شود و بخش clean برای پاک کردن فایل‌های تولید شده در بخش all است.</p> <p>در اینجا ما مسیر قرار دادن فایل اجرایی برنامه را شاخه /usr در نظر گرفته‌ایم؛ شاخه‌ای که فایل‌های اجرایی کاربران در آن قرار می‌گیرند و مانند دستورات ترمینال قابل فراخوانی و اجرا هستند. یعنی بعد از نصب برنامه با وارد کردن دستور linuxihaa در ترمینال نوشته Linuxihaa.IR برای کاربر نمایش داده می‌شود.</p> <p>اکنون تمام منابع و کدهای برنامه ما آماده شده است. از پوشه برنامه فایل tar.gz آن را می‌سازیم. این همان بسته‌ای است که به عنوان نسخه عمومی (generic) برای توزیع‌های لینوکس ارائه می‌شود. با این بسته کاربر می‌تواند بعد از استخراج (extract) آن دستور make را وارد کرده و فایل اجرایی را بسازد و استفاده کند. همچنین با دستور make install فایل اجرایی در مسیر مناسب قرار می‌گیرد و کاربر می‌تواند به عنوان یک برنامه نصب شده روی سیستم از آن استفاده کند.</p> <p>خب اکنون باید از بسته عمومی، بسته دبیان را بسازیم.</p> <p>ابتدا ایمیل و نام خود را برای مراحل بعدی معرفی می‌کنیم.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="nv">DEBEMAIL</span><span class="o">=</span><span class="s2">"[email protected]"</span> <span class="nv">DEBFULLNAME</span><span class="o">=</span><span class="s2">"Linuxihaa"</span> <span class="nb">export </span>DEBEMAIL DEBFULLNAME </code></pre> </div> <p>سپس به پوشه برنامه رفته و دستور زیر را وارد می‌کنیم تا فایل‌های مورد نیاز برای ساخت بسته دبیان ساخته شود.</p> <ul> <li>بخشی از دستورات که با رنگ تیره مشخص شده است مسیر جاری ما است.</li> </ul> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">~/linuxihaa-1.0$ </span>dh_make -c gpl3 -f ../linuxihaa-1.0.tar.gz </code></pre> </div> <p>در اینجا من بعد از سوایچ c لایسنس برنامه که gpl3 در نظر گرفته‌ام را نوشتم.</p> <p>با اجرای دستور بالا و وارد کردن s در جواب سوال نوع بسته (می‌خواهیم یک بسته معمولی عادی بسازیم)، خروجی زیر مشاهده می‌شود که جهت تایید اطلاعات است.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? <span class="o">[</span>s/i/m/l/k/n] s Maintainer name : Linuxihaa.IR Email-Address : [email protected] Date : Mon, 25 Aug 2014 18:46:30 +0430 Package Name : linuxihaa Version : 1.0 License : gpl3 Type of Package : Single Hit to confirm: Done. Please edit the files <span class="k">in </span>the debian/ subdirectory now. You should also check that the linuxihaa Makefiles install into <span class="nv">$DESTDIR</span> and not <span class="k">in</span> / . </code></pre> </div> <p>اکنون در شاخه برنامه، پوشه debian ساخته شده است که حاوی فایل‌هایی برای ساخت بسته دبیان است. با دستور زیر برخی از فایل‌هایی که در اینجا نیاز نیستند را حذف می‌کنیم.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">~/linuxihaa-1.0/debian$ </span>rm -f <span class="k">*</span>.ex <span class="k">*</span>.EX README.<span class="k">*</span> </code></pre> </div> <p>دو فایل اصلی در پوشه debian وجود دارد که باید آن‌ها را ویرایش کرد.</p> <p><strong>فایل control</strong></p> <div class="highlighter-rouge"><pre class="highlight"><code>Source: linuxihaa Section: unknown Priority: optional Maintainer: Linuxihaa.IR &lt;[email protected]&gt; Build-Depends: debhelper (&gt;= 8.0.0) Standards-Version: 3.9.4 Homepage: &lt;insert the upstream URL, if relevant&gt; #Vcs-Git: git://git.debian.org/collab-maint/linuxihaa.git #Vcs-Browser: http://git.debian.org/?p=collab-maint/linuxihaa.git;a=summary Package: linuxihaa Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: &lt;insert up to 60 chars description&gt; &lt;insert long description, indented with spaces&gt; </code></pre> </div> <p>مواردی که باید ویرایش شوند Section (بخش برنامه)، Homepage (آدرس سایت توسعه‌دهنده)، Depends (بسته‌هایی که برنامه ما برای اجرا به آن نیاز دارد) و Description (توضیحات برنامه) هستند. بخش توضیحات شامل توضیح کوتاه در ۶۰ حرف و توضیح بلند در خطوط جدا (اول هر خط یک فاصله باید قرار گیرد) است.</p> <p>موارد Vcs هم مربوط به آدرس نگهدارنده نسخه برنامه هستند که در اینجا گیت در نظر گرفته و آدرسی برای آن فرض شده است که به علت این‌که برنامه ما در این آدرس نگهداری نمی‌شود از آن صرف نظر می‌کنیم.</p> <p>ما فایل control را به شکل زیر ویرایش می‌کنیم.</p> <div class="highlighter-rouge"><pre class="highlight"><code>Source: linuxihaa Section: utils Priority: optional Maintainer: Linuxihaa.IR &lt;[email protected]&gt; Build-Depends: debhelper (&gt;= 8.0.0) Standards-Version: 3.9.4 Homepage: http://linuxihaa.ir Package: linuxihaa Architecture: any Description: Linuxihaa Debian Test Package This software literally prints "Linuxihaa.IR". </code></pre> </div> <p>همان‌طور که مشاهده می‌کنید مورد Depends را نیز حذف کردیم زیرا برنامه ما بسیار ساده است و به بسته خاصی نیاز ندارد.</p> <p><strong>فایل copyright</strong></p> <p>این فایل بسته به لایسنسی که در دستور dh_make انتخاب کردیم ایجاد می‌شود و موارد کوچکی دارد که باید براساس اطلاعات سازنده کامل شود.</p> <p>مثلا فایل copyright برنامه ما بعد از ویراش این‌گونه است.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: linuxihaa Source: <span class="o">[</span>آدرس سورس برنامه] Files: <span class="k">*</span> Copyright: 2014 [email protected] 2014 Linuxihaa License: GPL-3.0+ </code></pre> </div> <p>بعد از ویرایش این فایل‌ها نوبت به ساخت بسته‌ها می‌رسد.</p> <p>به پوشه اصلی برنامه باز می‌گردیم و دستور زیر را وارد می‌کنیم تا فایل‌های مورد نیاز بسته سورس دبیان ساخته شوند.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>debuild -S </code></pre> </div> <p>خب تمام شد! فایل‌هایی که برای انتشار برنامه نیاز هستند آماده شدند.</p> <ul> <li>linuxihaa_1.0.orig.tar.gz</li> <li>linuxihaa_1.0-1.debian.tar.gz</li> <li>linuxihaa_1.0-1.dsc</li> <li>linuxihaa_1.0-1.changes</li> </ul> <p>از این مرحله به بعد <strong>اختیاری</strong> است و برای تولید بسته‌های باینتری (.deb) برنامه، جهت استفاده شخصی و آزمودن آن برای خودمان هست زیرا مخازن با دریافت فایل‌های بالا، خودشان بسته‌های باینری را ساخته و در مخزن قرار می‌دهند.</p> <p>خب در همان پوشه مراحل زیر را دنبال می‌کنیم تا بسته باینری برنامه ساخته شود.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>fakeroot debian/rules build </code></pre> </div> <p>اکنون با دستور زیر بسته باینری دبیان را از برنامه می‌سازیم.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>fakeroot debian/rules binary </code></pre> </div> <p>اگر از پوشه برنامه خارج شوید مشاهده می‌کنید که بسته قابل نصب با پسوند deb از برنامه ایجاد شده است و می‌توان آن را نصب کرد اما کار ما هنوز تمام نشده است. این یک بسته باینری است و به معماری سیستم ما محدود است؛ برای تکمیل کار و انتشار برنامه باید فایل‌های دیگری نیز ساخته شود که با دستور زیر ایجاد می‌شوند.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>debuild -us -uc </code></pre> </div> <p>اکنون به شاخه بالای پوشه برنامه بازگردید و دستور زیر را وارد کنید تا فایل‌های موقت حذف شوند و بسته‌های سورس از بسته ما استخراج گردد.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">~/$ </span>dpkg-source -x linuxihaa_1.0-1.dsc </code></pre> </div> <p>خب این مرحله هم تمام شد و بسته باینری در کنار دیگر بسته‌های سورس دبیان قابل مشاهده است.</p> <ul> <li> <p>مرجع santi-bassett.blogspot.com/2014/07/how-to-create-debian-package.html</p> </li> <li> <p>تصویر شاخص از raphaelhertzog.com</p> </li> </ul>



برچسب ها :