۳٫۱ توضیع های باینری

قسمت ۴٫۱ را ببینید

۳٫۲ خودراه اندازی pkgsrc   یا Bootstrapping pkgsrc

Pkgsrc می تواند برای استفاده در دو حالت متفاوت خودراه اندازی گردد: حالت دارای مجوز و بدون مجوز (Privileged & Unprivileged)

در حالت بدون مجوز برعکس حالت با مجوز، تمامی برنامه ها در زیر مجموعه یک کاربر نصب شده و قابلیت استفاده در عملیات های با مجوز را ندارد. ( بسته ها کاربر ویژه ای درست نمی کند و تمامی مجوزهای فایل نادیده گرفته می شود).

نصب کیت خودراه انداز از منبع کد بسیار ساده است به مانند مثال زیر:

# env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc

# cd pkgsrc/bootstrap

# ./bootstrap

برای استفاده از خودرا انداز بدون مجوز کافی از گزینه ای “–unprivileged” در اجرا استفاده کنید.

به صورت پیش فرض در حالت با مجوز، pkgsrc از /usr/pkg برای prefix و برای برنامه های نصب شده و /var/db/pkg برای راهنمای دیتابیس بسته ها در مکانی که pkgsrc دفتر داری داخلی را اداره می کند، استفاده می کند. در واقع/var به عنوان varbase استفاده می گردد، مکانی که بسته ها اطلاعات پایدار خود را در آنجا نصب می کنند. در حالت بدون مجوز pkgsrc از ~/pkg برای prefix و ~/pkg/var/db/pkg برای دیتابیس بسته ها و ~/pkg/var برای varbase استفاده می کند.

شما می توانید آرایش پیش فرض را تغییر دهید، برای اطلاعات بیشتر “./bootstarp –help” را اجرا کنید.

توجه: خودراه انداز ابزار bmake را نصب می کند. هنگام ساخت از طریق pkgsrc از این ابزار استفاده کنید. برای مثال به جای make در اینجا از bmake استفاده کنید.

توجه: می توان چندین مورد همزمان را با استفاده از دایرکتوری های بدون تصادم خودراه اندازی کرد.

۳٫۳ نکته های خاص پلتفورم ها:

چندین نکته که شما باید در مورد پلتفورم های مختلف بدانید.

۳٫۳٫۱ cygwin

فقط ورژن های ۱٫۷٫x و بالاتر پشتیبانی می شوند.

شما باید حداقل بسته های اصلی که در طبقه بندی BASE می باشند به اضافه یکی از کامپایلرهای gcc, gcc4, or clang را نصب کنید. برای gcc و gcc4 کامپایلرهای C and C++ هم به صورت پیش فرض نصب می شوند. شما می توانید کامپایلر Fortran را نیز نصب کنید که نیاز به استفاده از ابزار libtool را دارد. اگه نصب نکردید یا نسخه قدیمی می باشد، Fortran با خود pkgsrc به صورت خودکار نصب می شود.

نکته ای در Cygwin FAQ وجود دارد که قابل توجه می باشد: ” چرا su کار نمی کند؟” دستور su(1) در توضیع Cygwin وجود دارد ولی هیچ موقع کار نمی کرده، فقط در حالتی که bootstarp pkgsrc را بدون مجوز انجام دهید، به این صورت:

  • روی ترمینال راست کلیک کنید و گزینه Run as administrator را بزنید.

 

۳٫۳٫۲ Darwin (Mac OS X)

فقط نسخه ۵٫x و بالاتر پشتیبانی می گردد.

قبل از اینکه شروع کنید، نیازدارید که Mac OS X developer Tools را از قسمت Developer Connection اپل دانلود و نصب کنید. برای این کار نیاز به عضویت (مجانی) است. اطلاعات بیشتر:

http://developer.apple.com/macosx/

همچنین اگه می خواهید از سیستم X11 برای ساخت بسته ها استفاده کنید مطمئن شوید که X11 نیز نصب می باشد (می توانید از همان قسمت ذکر شده بگیرید)، همچنین اگه Xcode لازم است باید ابزارش را دانلود و نصب کنید.

۳٫۳٫۳ FreeBSD

نسخه های ۸٫۳ و ۹٫۰ تست شده و پشتیبانی می شوند، نسخه های دیگر شاید کار کنند.

باید مراقب باشد که ابزارهای که این کیت نصب می کند با ابزارهای محیط کاربری Userland در FreeBSD اختلال ایجاد نکند. چندین مرحله وجود دارد:

  1. FreeBSD دیتابیس پورت های pkg را در /var/db/pkg نگه داری میکند. بنابراین پیشنهاد می شود که مسیر و مکان جداگانه ای را انتخاب کنید مثلا “user/pkgdb”. می توانید با گزینه –pkgdbdir در اسکریپت bootstarp این کار را انجام دهید.
  2. اگر قصد استفاده از ابزار و پورت های FreeBSD را ندارید، پیشنهاد می شود برای جلوگیری از اختلال آنها را از مسیر جابه جا کنید، مثلا:

 

cd /usr/sbin

mv pkg_add pkg_add.orig

mv pkg_create pkg_create.orig

mv pkg_delete pkg_delete.orig

mv pkg_info pkg_info.orig

  1. هنگامی که از bootstrap script استفاده می کنید،نمونه فایل conf در مسیر /etc/mk.conf.example ایجاد می شود.

۳٫۳٫۴ GNU/kFreeBSD

تنها توضیع GNU/kFreeBSD در حال حاضر Debian GNU/kFreeBSD می باشد، که نسخه ۷٫۰ و بالاتر تست شده و پشتیبانی می گردد که شما باید بسته های ibncurses and libncurses-dev را نصب کنید.

۳٫۳٫۵ Interix

Interix یک ساب سیستم سازگار با POSIX برای کرنل ویندوز NT می باشد که محیطی شبیه یونیکس ایجاد می کند. در واقع یک قسمت از سرویس ویندوز برای بسته های یونیکسی می باشد، که به صورت مجانی در اختیار تمامی لایسنس های ویندوز ۲۰۰۰ و XP (به جز ورژن خانگی) و ۲۰۰۳ قرار دارد و قابل دانلود از قسمت زیر می باشد:

http://www.microsoft.com/windows/sfu/

سرویس های یونیکس نسخه ۳٫۵ تست شده، نسخه های ۳٫۰ و ۳٫۱ شاید کار کند، اما رسما پشتیبانی نمی شوند.

سرویس های مربوط به برنامه های یونیکس SUA در ویندوز سرور ۲۰۰۰۳R2 (5.2) ویندوز ویستا و ویندوز سرور ۲۰۰۸ (۶٫۰)، ویندوز هفت و ویندوز سرور ۲۰۰۸ R2 (6.1) یکپارچه شده است. در همین زمان نگارش کتاب SUA های ساب سیستم interix 6.0 (32bit) and 6.1 (64bit) تست شده. نسخه های دیگر شاید کار کنند.

ساب سیستم Interix 5.x هرگز با pkgsrc تست نشده است.

 

۳٫۳٫۵٫۱ هنگام نصب Interix/SFU

جهت استفاده ازpkgsrc در سرویس ویندوز برای توضیع یونیکس ۳٫۵ ، بسته های زیر می بایست نصب باشند:

  • Utilities -> Base Utilities
  • Interix GNU Components -> (all)
  • Remote Connectivity
  • Interix SDK

هنگام استفاده از pkgsrc در Interix به هیچ عنوان در قسمت ابزار زیرمجموعه UNIX Perl را نصب نکنید ( این Perl 5.6 بدون پشتیبانی ماژول های مشترک می باشد که در مسیر /usr/local نصب شده و فقط موجب اختلال خواهد شد). در عوض ورژن Perl 5.8 را از pkgsrc نصب کنید.

در قسمت اتصال ریموت نیازی به نصب زیرمجموعه “Windows Remote Shell Service” نمی باشد.

درهنگام نصب از شما پرسیده می شود که Setuid فعال شود؟ حتما این گزینه را فعال کنید. همچنین آیا پیش فرض مسیرها حساس به کوچک یا بزرگ بودن حروف باشد؟ این گزینه نیز فعال باشد، بدون فعال سازی این گزینه مقادیر زیادی از بسته ها به مانند Perl نصب نخواهد شد.

 

۳٫۳٫۵٫۲ درصورت نصب بودن Interix/SFU چه باید کرد؟

درصورت نصب بودن آنها و تمایل شما به تغییر تنظیمات جهت کار با pkgsrc به موارد زیر توجه کنید:

  • برای پاک کردن UNIX perl از قسمت Add/Remove ویندوز استفاده کنید، مورد Microsoft Winodws Services for UNIX را انتخاب کنید، سپس گزینه تغییر را بزنید. در نصب کننده ویندوز مجددا گزینه Add/remove را انتخاب کنید، سپس تیک (گزینه) Unix Perl را بردارید.
  • برای اعمال حساسیت به کوچک و بزرگ بودن حروف برای فایل سیستم ها، EXE را اجرا و تغییر زیر را انجام دهید:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\kernel

Set the DWORD value “obcaseinsensitive” to 0; then reboot.

 

  • برای فعال کردن setuid باینری ها (دلخواه می باشد) مجددا EXE را اجرا کنید و تغییر زیر را اعمال کنید:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Services for UNIX

Set the DWORD value “EnableSetuidBinaries” to 1; then reboot.

۳٫۳٫۵٫۳ نکته مهم برای استفاده از pkgsrc

مدیر بسته (package manager) فرق ندارد هرکدام (pkgsrc “su” user or user running pkg_add) باید جزء گروه مدیران Local Administrators Group باشد. برای اجرا خودراه انداز bootstarp باید از این کاربر استفاده کرد.

Umask مدیر بسته باید ۲۰۰ باشد. درغیر این صورت make install با اخطار مواجه می شود. این تضمین می کند که دایرکتوری های /var/db/pkg قابل نوشتن برای گروه مدیران می باشد.

بسته های باینری محبوب Interix  مربوط به http://www.interopsystems.com از نسخه های قدیمی ابزار pkg_* استفاده می کند. بهتر است، آنها با هم از pkgsrc استفاده نکنند. اگر می خواهید در یک زمان از آنها و pkgsrc با هم استفاده کنید، بهتر است مطمئن شوید که از ابزار مناسب pkg_* برای هر بسته باینری استفاده کنید.

تنظیم عبارت مورد استفاده در کنسول DOS-type ویندوز interix می باشد. بیشتر سیستم ها مقدار ورودی termcap/terminfo را ندارند، ولی مقدار زیر termcap نمونه سازی کافی را در بیشتر موارد فراهم می کند:

interix:kP=\E[S:kN=\E[T:kH=\E[U:dc@:DC@:tc=pcansi:

۳٫۳٫۵٫۴ محدودیت های پایگاه Interix

هرچند Interix جایگزین مناسب و آشنایی برای پلتفرم های شبه یونیکس می باشد، اما چندین مشکل نیز دارد که استفاده کنندگان باید در نظر داشته باشند.

  • X11 :

interix با استانداراد X11R6 باینری ها کلاینتی می آید، و توانایی اجرایی برنامه های مبتنی بر X11 را دارد. ولی با XServer تطابق ندارد.

  • سرعت بخشیدن X11

به خاطر اینکه Interix با نوع کاملا متفاوت زیر سیستم NT نسبت به برنامه های Win32 اجرا می شود، درحال حاضر پروتکل های اضافی برای سرعت بخشیدن به X11 را پشتیبانی نمی کند. بیشتر برنامه های فعل و انفعالی در Xserver نسبتا سریع اجرا می شوند، اما برنامه های اجرا ویدیو و برنامه های با گرافیک بالا نیاز به اجرای سریعتر از معمول CPU را دارند.

  • صدا: interix هیچ پشتیبانی برای خروجی صدا ندارد. Pkgsrc از برنامه esound نسخه کلاینت و سرور برای پشتیبانی صدا در interix استفاده می کند. برخلاف بیشتر پلتفرم ها /audio/esound کامپوننت سروری esd را ندارد. برای خروجی صدا در میزبان interix، برنامه /emulators/Cygwin_esound می بایست نصب شود.
  • CD/DVDs,USB,and SCSI: در Interix دسترسی مستقیم به این وسیله ها در حال حاضر پشتیبانی نمی گردد. پس درحال حاضر نمی توان از طریق وسایل غیر فایل سیستمی به آنها دسترسی داشت.
  • Tape Drives: به همان دلایل بالا به این وسیله نیز در interix دسترسی موجود نیست، اما با استفاده از Cygwin به عنوال پل Bridge می توان دسترسی داشت.

۳٫۳٫۵٫۵ مشکلات شناخته شده pkgsrc در interix

در حالت کلی نیازی به داشتن کاربر Root در سیستم ویندوز نیست، هر عضوی که در گروه ادمین ها باشه کفایت می کند. هرچند بعضی بسته ها هنوز کاربری به نام Root را کاربر با دسترسی فرض می کنند. برای رفع این مشکل، شما شاید چنین کاربری را بسازید و مطمئن شوید که جزء گروه ادمین ها می باشد.

Pkg_add دایرکتوری های با مود ۰۷۵۵ (نه با مد ۰۷۷۵) در $PKG_DBDIR ایجاد می کند. عجالتا، بسته ها را با ادمین نصب کنید و یا دستور زیر را بعد از نصب جهت رفع مشکل اجرا کنید:

# chmod -R g+w $PKG_DBDIR

۳٫۳٫۶ IRIX

شما نیازمند وجود کامپایلر فعال C می باشید و یا یکی از gcc یا SGI MPIS or MPISpro. لطفا متغیر محیطی CC خودتان را به دلخواه تنظیم کنید. اگر لایسنس برای MIPSpro ندارید، می توانید فایل gcc tardiest را از آدرس زیر بگیرید. درنظر داشته باشید شما نیازمند IRIX 6.5.17 به بالا هستید، همانطور که این جدیدترین ورژن IRIX هست که از if_indextoname(3), if_nametoindex(3), etc. پشتبانی می کند.

در این زمان، pkgsrc تنها از یک ABI در زمان استفاده می کند، این یعنی شما نمی توانید بین old32-bit ABI, new32-bit ABI and 64-bit ABI جابجا کنید. اگر شما از abi=n32 استفاده کنید، تمامی بسته ها بر آن مبنا ساخته خواهند شد. بنابراین مطمئن شوید هیچ تداخلی CFlAG در محیط یا فایل mk.conf نداشته باشید.

خصوصا مطمئن شوید شما فایل های n32 رو به n64 و یا برعکس لینک نمی کنید. فایل /etc/compiler.defaults رو بررسی کنید.

اگر شما pkgsrc را از طریق NFS به دیگر میزبان ها وصل کرده اید، مطمئن شوید که WRKOBJDIR بر روی دایرکتوری محلی تنظیم شده باشد، دیده شده است که IRIX بعضا هنگام اجرا در زمان هایی که روی شبکه لینک شده باشد، به مشکل برخورده است.

روند خودراه اندازی bootstrap باید با گزینه های درست برای برنامه ها مانند imake (1) تنظیم شده باشد. اما شما شاید بخواهید چندین گزینه را بنا به نوع نصب داخلی تغییر دهید. لطفا فایل pkgsrc/mk/defaults/mk.conf را چک کنید و البته راهنمایی کامپایلر ها را برای اطلاعات بیشتر بخوانید. درصورتی که از کامپایلر SGI’sMIPSP استفاده می کنید گزینه زیر را در mk.conf ست کنید:

PKGSRC_COMPILER= mipspro

درغیر این صورت، pkgsrc فرض خواهد کرد که شما از gcc استفاده می کنید که به مشکل و invalid flags برخورد خواهید کرد. توجه کنید pkgsrc به صورت خودکار فایل mk.conf.example ایجاد می کند.

اگر شما هردو کامپایلر gcc and MIPSPro را نصب دارید، اما می خواهید کامپایلر MIPSPro را استفاده کنید، مسیر PATH را غیر از مسیر gcc قرار دهید و “—preserve-path” flag را تصویب کنید.

 

۳٫۳٫۷ لینوکس

بعضی ورژن های لینوکس برای مثال دبیان گنو/لینوکس به libtermcap or libcurses نیاز دارند. نصب بسته libncurses-dev مشکل را حل خواهد کرد. Pkgsrc هر دو کامپایلر gcc and icc را پشتیبانی می کند که پیش فرض gcc می باشد. Icc8.0 and 8.1 روی نسخه i386 تست شده است.

برای bootstrap با icc فرض می کنیم دایرکتوری پیش فرض می باشد:

env ICCBASE=/opt/intel/cc/10.1.008 ./bootstrap –compiler=icc

توجه: برای icc 8.0 باید گزینه زیر “LDFLAGS=static-libcxa و برای icc8.1 گزینه “LDFLAGS=i-static” را اضافه کنید. برای نسخه icc 10.1 هیچ یک نیاز نیست.

مقدار ICCBASE را به مسیری که icc در آن نصب می باشد تنظیم کنید. بعد از انجام خودراه اندازbootstarp ، ICCBASE را در mk.conf تنظیم کنید:

ICCBASE= /opt/intel/cc/10.1.008

پیش فرض pkgsrc برای ICCBASE ، /opt/intel_cc_80 می باشد. این پیش فرض برای icc8.0 می باشد، اگر از نسخه جدیدتر استفاده می کنید مطمئن شوید که مسیر درست را تنظیم کرده اید. Pkgsrc از روش لینک کردن ایستا static linking در کتابخانه های فراهم شده توسط icc استفاده می کند، پس باینری ها می توانند در سیستم های دیگر که کتابخانه های مشترک نصب شده ندارند نیز اجرا شود.

Libtool، همچنین لیستی از کتابخانه ها هنگام اجرا دستور ld(1) هنگامی لینک کتابخانه های مشترک شده C++ استخراج می کند. یعنی کتابخانه های مشترک شده C++ که لینک به libtool شده به کتابخانه های icc وابستگی دارد.

 

۳٫۳٫۸ MirBSD

Pkgsrc بروی MirBSD 10-current تست شده است و بر روی نسخه های قدیمی تر شاید کار کند اما روی نسخه های قدیمی تر از ۱۰ پشتیبانی نمی شود.

بسته ابزار های (قدیمی) پورت ها Mirports همان اسم هایی که pkgsrc دارد را دارا می باشد. مطمئن شوید که ابزارهای مناسب استفاده شود. هنگام نصب بسته ها از منبع اصلی source برای pkgsrc از bmake و برای Mirports از mmake استفاده کنید.

Pkgsrc و Mirports از یک مسیر برای دیتابیس بسته ها استفاده می کنند /var/db/pkg بنابرین پیشنهاد می شود برای pkgsrc از مسیر /usr/pkg/db استفاده نمایید تا تضادی به وجود نیاید. این همچنین تنظیم پیش فرض برای ساخت باینری بسته ها می باشد.

بسته های باینری برای MirBSD/i386 روی اف تی پی سرور pkgsrc موجود است. کیت bootstrap حاوی مدیریت بسته pkgin می باشد. برای اطلاعات بیشتر pkgsrc روی MirOS را ببینید.

https://www.mirbsd.org/pkgsrc.htm

 

۳٫۳٫۹ OpenBSD

OpenBSD 5.1 تست و پشتیبانی می شود، نسخه های قدیمی تر شاید کار کنند.

مطمئن شوید ابزارهایی که این کیت نصب می کند تداخلی با ابزارهای محیط کاربر userland نداشته باشند، برای اینکار چندین مرحله وجود دارد:

  • OpenBSD دیتابیس پورت ها را در /var/db/pkg نگه می دارد، برای همین پیشنهاد می شود که شما مسیر دیگری را با استفاده از گزینه –pkgdbdir در اسکریپت خودراه انداز انتخاب کنید. مثلا /usr/pkgdb
  • اگر نمی خواهید از ابزارهای پورت OpenBSD استفاده کنید، برای جلوگیری از اختلال بهتر است آنها را به مسیر دیگری منتقل کنید:

# cd /usr/sbin

# mv pkg_add pkg_add.orig

# mv pkg_create pkg_create.orig

# mv pkg_delete pkg_delete.orig

# mv pkg_info pkg_info.orig

  • به هنگام استفاده از bootstrap فایل conf در /etc/mk.conf.example ایجاد می شود، OpenBSD نیز از فایل mk.conf استفاده می کند. برای رفع این مشکل می توانید تغییرات زیر را اعمال کنید:

.ifdef BSD_PKG_MK

# pkgsrc stuff, e.g. insert defaults/mk.conf or similar here

.else

# OpenBSD stuff

.endif

۳٫۳٫۱۰ Solaris

سولاریس ۲٫۶ تا ۱۰ در هر دو پلتفورم x86 و Sparc پشتیبانی می شود. شما نیاز به کامپایلر فعال C دارید. هردو کامپایلر gcc4.5.3 و Sun WorkShop5 تست شده اند.

برای استفاده بر روی سولاریس ۸ بسته های زیر نیاز می باشند:

  • SUNWsprot
  • SUNWarc
  • SUNWbtool
  • SUNWtoo
  • SUNWlibm

توجه کنید که از June 2006، استفاده از GNU Binutils بر روی سولاریس پشتیبانی نمی شود.

هر کامپایلری که استفاده می کنید، مطمئن شوید که ابزار کامپایلر و $prefix در مسیر PATH موجود می باشند، این شامل /usr/ccs/{bin,lib} و برای مثال /usr/pkg/{bin,lib} می باشد.

۳٫۳٫۱۰٫۱ اگر از gcc استفاده می کنید

اگر شما فقط از gcc برای ساخت تمام بسته ها استفاده نمایید زندگی راحت تر می شود. پیشنهاد می شود فقط برای خودراه انداز bootstrapping از gcc خارجی استفاده کنید، سپس یا gcc را با lang/gcc46 بسازید و یا بسته باینری gcc نصب کنید. سپس gcc را در هنگام bootstrapping حذف کنید.

بسته باینری gcc را می توانید از این مسیر دریافت کنید: http://www.sunfreeware.com

۳٫۳٫۱۰٫۲ اگر از Sun WorkShop استفاده می کنید

از ورژن WorkShop 5.0 به بعد برای این کار شما به بسته های زیر نیازمندید:

  • SPROcc – Sun WorkShop Compiler C 5.0
  • SPROcpl – Sun WorkShop Compiler C++ 5.0
  • SPROild – Sun WorkShop Incremental Linker
  • SPROlang – Sun WorkShop Compilers common components

باید متغیرهای زیر را در mk.conf تنظیم کنید:

CC= cc

CXX= CC

CPP= cc -E

CXXCPP= CC –E

توجه کنید:

تنظیمات CCP ممکن است یکسری بسته ها را که از C pre-processor برای پردازش چیزهایی بجز منبع کد C استفاده می کنند را بشکند.

 

۳٫۳٫۱۰٫۳ ساخت باینری ۶۴bit با استفاده از SunPro

برای ساخت باینری ۶۴bit، شما فقط باید مقدار زیر را در mk.conf داشته باشید:

PKGSRC_COMPILER= sunpro

ABI= 64

توجه:

این تنظیمات روی نسخه Sparc تست شده، ماشین های Intel و AMD نیاز به کمی کار دارند.

۳٫۳٫۱۰٫۴ مشکلات معمول

درمواقعی هنگام استفاده از libtool، شل /bin/ksh با مشکل قطعه سازی (segmentation fault) خراب می شود. برای رفع مشکل می بایست از شل دیگری در اسکریپت تنظیمات استفاده کرد، برای مثال با نصب شل bash و اضافه کردن خطوط زیر در mk.conf

CONFIG_SHELL= ${LOCALBASE}/bin/bash

WRAPPER_SHELL= ${LOCALBASE}/bin/bash

سپس بسته /devel/libtool-base را بازسازی کنید.

 

H.Mehrara [at] NetBSD.ir

حسین مهرآرا