شما هنوز به سیستم وارد نشده اید.

#1 2015-12-12 19:04:13

حسین حیدری
عضو
از : اصفهان
ثبت شده: 2015-09-16
ارسال ها: 368

کمک برای نوشتن پی کی جی بیلد

سلام
بیس پی کی جی بیلد کردن چی هست ؟؟
باید اسکریپت را توی یه فایلی متنی با قالب sh بنویسم یا بدون قالب ؟؟
اسم اسکریپت چی باید باشه ؟؟ آیا فرقی میکنه ؟؟
فقط کافی برای کامپایل دستور makepkg -s را بزنیم ؟؟ makepkg از کجا میفهمه که باید کدوم فایل متنی را کامپایل کنه ؟؟

فقط مورد های خیلی پیش پا افتاده را میخوام فعلا.
مرسی از دوستان


Just an anime fan

آفلاین

#2 2015-12-12 19:34:28

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,308

پاسخ: کمک برای نوشتن پی کی جی بیلد

بصورت غیردقیق میشه گفت pkgbuild یک شل اسکریپت هست که حاوی بلوک های متعددیه. از یک دیدگاه، تیکه اولش دربرگیرنده یک سری اطلاعات هست مثل ورژن بسته، آدرس سایت بسته، آدرس سورس بسته، لایسنسهایی که ازون بسته پشتیبانی می کنن و ازین قبیل. تیکه دوم حاوی دیپندنسیهای اون بسته هست و همچنین بسته هایی که ممکنه با اون بسته کانفلیکت داشته باشن و باز ازین قبیل. تیکه بعدی حاوی چکسام ها و ازین قبیل هست. تیکه اصلی pkgbuild حاوی دستورات نصب اون بسته هست. همون دستورایی که بصورت مستقیم توی ترمینال زده میشن تا بسته نصب بشه. عملکرد به این صورته که شخص makepkg رو در یک دایرکتوری میزنه. makepkg در اون دایرکتوری میگرده و بمحض اینکه یه اسکریپت PKGBUILD پیدا کرد اون رو خط به خط اجرا میکنه. کار عمدش اینه که میاد و سورس رو میگیره  و از حالت فشرده خارجش میکنه. بعد یک پوشه میسازه و بعنوان محیط fakeroot وارد اون میشه و عملیات نصب رو توی اون انجام میده. اگر شما وارد اون پوشه بشید خواهید دید که حاوی زیرپوشه هاییه که انگار اون بسته نصب شده و قسمت های مختلف بسته توی دایرکتوری هایی که باید باشن قرار گرفتن. مثلا آیکنش رفته توی دایرکتوری آیکن ها. کتابخونه هاش توی دایرکتوری کتابخونه ها، فایل های اجراییش توی دایرکتوری bin و بهمین ترتیب. وقتی pkgbuild صحیح نوشته شده باشه، این فرآیند به اتمام میرسه. محیط fakeroot ترک میشه و یک بسته فشرده با فرمتی که pacman اون رو میفهمه تولید میشه. تصور کنید که dpkg با فلگ i چطور یک بسته رو نصب میکنه در دبیان. خب. pacman هم با فلگ U این کار رو انجام خواهد داد. این یک تم کلی هست. makepkg فلگ هایی داره که میتونه در آن واحد تمام این کارها از ساخت بسته از روی دستورات pkgbuild گرفته تا نصب اون و پاک کردن پوشه های ساخته شده رو انجام بده. حتی بیشتر. بهرحال فقط منظورم اینه که این یک تم کلیه. وقتی که snapshot یک بسته رو از صفحه اون بسته در سایت آرچ دانلود می کنید و اکسترکتش می کنید، یک pkgbuild خواهید دید به اضافه احتمالا فایل های دیگری مثل patch اون بسته، یک فایل به نام package.install که منظور از package همون اسم بسته هست، احیانا آیکون برنامه و شاید یکی دوتا فایل حاوی متادیتاهایی که نویسنده ترجیح داده باشن. فرض کنید سورس یک فایل دو سال پیش configure شده و نویسنده دیگه فرصتی نکرده تا با آپدیت شدن های مکرر کرنل های جدید، بیاد و دوباره configure کنه. شاید تصمیم بگیره تا یه فایل حاوی دستورالعمل هایی برای نصب بسته توی کرنل جدید توی snapshot قرار بده. منظورم اینه که اون snapshot حاوی چنین چیزهایی هست. بهترین PKGBUILDها از آن بسته هایی هستن که در مخازن رسمی قرار دارن. قطعا هم خوب نوشته شدن و هم بسته ای که برای اون بسته نوشته شدن عالی نوشته شده. یک راه سریع برای یاد گرفتن اونچه که در pkgbuildها میگذره، مطالعه محتوای اونها هست. اگر میخواید تمام pkgbuildهای بسته های مخازن رسمی رو داشته باشید که البته حجم تمام اینها نزدیک به ۲۵ مگ بیشتر نیست، ABS رو مطالعه کنید. من اینجا چیزی راجع بهش نوشتم:
http://arcush.ir/index.php/1394/08/08/abs/
با توجه به اینکه آرچ غلطانه، ممکنه طی چند روز برخی ازینها عوض بشن، اما هدف یادگیریه و اینکه ببینیم توی یه pkgbuild چی میگذره.

آفلاین

#3 2015-12-12 21:59:56

حسین حیدری
عضو
از : اصفهان
ثبت شده: 2015-09-16
ارسال ها: 368

پاسخ: کمک برای نوشتن پی کی جی بیلد

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


Just an anime fan

آفلاین

#4 2015-12-12 22:26:11

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,308

پاسخ: کمک برای نوشتن پی کی جی بیلد

نوشتن pkgbuildها یکسان نیست. مثلا وقتی قراره شما یک بسته رو نصب کنید، ممکنه قبل از اینکه اون رو نصب کنید یه سری کارهایی انجام بدید و بعدا شروع کنید به زدن دستوراتی که نویسنده توی مثلا readme داده. درمورد بسته دیگه ای ممکنه نیاز نباشه. پس نوشتن pkgbuild برای این دو تا یکسان نیست. همچنین وقتی وارد نوشتن pkgbuild میشید، ممکنه ریزه کاری های زیادی بوجود بیان. مثلا برای معماری های ۳۲ و ۶۴ ممکنه نوشتن یه pkgbuild متفاوت بشه. برای نوشتن یک pkgbuild شما به این ها نیاز دارید:

۱- یه نرم افزار که pkgbuildی براش نوشته نشده. گاهی افراد می نویسن ولی توی AUR نمیذارن. ولی معمولا این اتفاق میفته. یعنی اگه توی aur و مخازن رسمی سرچ کردید و دیدید که نرم افزار موردنظر مشا وجود نداره، شروع کنید به نوشتنش.

۲- برید توی readme اون نرم افزار و فرآیند نصبش رو یک بار انجام بدید. این دستورات دقیقا توی pkgbuild خواهند اومد.

۳− دیپندنسی ها رو توی آرایه دیپندنسی pkgbuild قرار بدید.  این دیپندنسی ها رو میتونید از سایت نرم افزار یا داکیومنت های نرم افزار دربیارید.

۴− بقیه کارها حواشی هستن. بعبارتی پر کردن آرایه های لایسنس و این چیزا.


مرحله اصلی مرحله یک هست که تعیین کنندست. چند تا تابع برای مرحله یک وجود دارن از قبیل توابع build، check، package، prepare، pkgver. مراحل نصب نرم افزار باید بنحو مناسبی توی این توابع پخش بشن. گاهی نیاز به استفاده از این توابع نیست. با توجه به شرایط مساله، حالت های متفاوتی بوجود میان. بنابراین نمیشه یک فرمول برای نوشتن pkgbuild ارائه داد. در عین حال، اتفاقی که میفته اکثر اوقات، شبیه هم هست. ریزه کاری ها هم زیادن. مثلا اگر makepkg رو با فلگ e اجرا کنید تابع prepare ران نمیشه. این فقط یه مثال بود برای اینکه ببینید نمیشه درقالب چندتا پاراگراف بحث pkgbuild رو تموم کرد.

به اینجا یه سری بزنید:

/usr/share/pacman

سمپل هایی برای حالات مختلف وجود داره. نمونه ای برای pkgbuild یک گروه از بسته ها، نمونه برای pkgbuild بسته ای در git و نمونه های دیگه. شما بالاخره ناگزیرید  که abs رو نصب کنید. چراکه برای pkgbuildای که خواهید نوشت باید در یک کلکسیون از pkgbuildها بگردید و باتوجه با کارائی اون بسته یک pkgbuild مشابه پیدا کنید و شروع به مقایسه و ایده گرفتن کنید.

پس به طور خلاصه، نرم افزار رو ابتدا مشخص کنید، سپس صفحه هایpkgbuild، creating packages و makepkg رو بخونید. شروع به نوشتن pkgbuild کنید و اگر نیاز بود، در اینجا به اشتراکش بگذارید تا ما هم راجع بهش فکر کنیم.

آفلاین

#5 2015-12-22 17:48:49

حسین حیدری
عضو
از : اصفهان
ثبت شده: 2015-09-16
ارسال ها: 368

پاسخ: کمک برای نوشتن پی کی جی بیلد

سلام
هر کدوم از این تابع ها توی pkgbuild چیکار میکنن ؟

تابع ها :

prepar
build
check


Just an anime fan

آفلاین

#6 2015-12-22 22:05:07

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,308

پاسخ: کمک برای نوشتن پی کی جی بیلد

تابع ()prepare از ورژن ۴.۱ به بعد پکمن ارائه شده و اختیاریه. معمولا هم patchهای بسته رو توی این تابع قرار میدن یا اگر لازم باشه کاری قبل از فرآیند نصب انجام بشه اون کار رو در این تابع قرار میدن. ترتیب قرار قرار گرفتن توابع در PKGBUILD بسیار مهمه. این تابع قبل ار تابع ()build قرار میگیره و همچنین بعد از اکسترکت شدن بسته سورس. بنابراین اگر اکسترکت شدنی انجام نشه این تابع هم اجرا نمیشه.


تابع ()build هم ممکنه البته استفاده نشه. مخصوصا در جاهائی که بسته سورس فقط حاوی چند تا اسکریپت و کتابخونه هست که فقط باید برن در دایرکتوری های معروف کپی بشن.  گرچه البته در بسیاری از PKGBUILDها لازمه. چون معمولا اونها فقط حاوی چند تا اسکرسپت نیستن.  در این تابع هست که ایجاد یک محیط fakeroot اتفاق میفته و فرآیند ساخت در اون محیط fakeroot هم شروع میشه. دایرکتوری pkg همون محیط fakeroot هست. میتونیم بگیم این دایرکتوری یک ماکت فرضی از دایرکتوری هایی هست که در سیستم اصلی شما انتخاب شدن تا تک تک فایل ها در اون ها کپی بشن. فایل های اعم از داکیومنت ها، آیکون ها، اسکریپت ها، کتابخونه ها و  فایل های ناشی از کامپایل.

تابع ()check هم علیرغم اینکه اختیاری هست، ولی استفاده ازون بشدت توصیه میشه. اگر تجربه نصب LFS رو داشته باشید حتما به این نتیجه رسیدید که گاهی ممکنه استفاده ازین تابع از چند ثانیه تا چند دقیقه وقت بگیره اما کاملا بصرفه هست. در این تابع تست های قبل از شروع کامپایل انجا میشه.


لازمه که حتما صفحه creating packages رو برای توضیحات دقیق و مفصل بخونید.

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB