انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: پک کردن نرم افزار همراه با دیپندنسیها  (دفعات بازدید: 2493 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین saeedm69

  • Newbie
  • *
  • ارسال: 2
سلام
اولین سوال!
تو اندریود میشه خیلی راحت با برنامه های مختلف اپی که نصب کردی و منتقل کنی به یه دیوایس دیگه!! خب میدونیم که اندروید هم یه جور لینوکسه!! منم هم با توجه به اینکه فک میکنم تنها کشوری هستیم که پول ترافیک میدیم خواستم که همین کار رو تو ابونتو هم انجام بدم که هی مجبور نصب برنامه ها نشم ولی خیلی خوب نشد!! به خاطر دیپندنسیها
خود برنامه رو میشه پکش کرد هم میشه سورسش و دانلود کرد یا اینکه نصب شده رو پک کرد ولی دیپندنسی ها ایراد داره!!

دوستان کیس راه حلی داره؟؟؟!!!

آفلاین s1mpleworld

  • Sr. Member
  • *
  • ارسال: 309
  • جنسیت : پسر
پاسخ : پک کردن نرم افزار همراه با دیپندنسیها
« پاسخ #1 : 30 تیر 1395، 06:28 ب‌ظ »
سلام
اولین سوال!
تو اندریود میشه خیلی راحت با برنامه های مختلف اپی که نصب کردی و منتقل کنی به یه دیوایس دیگه!! خب میدونیم که اندروید هم یه جور لینوکسه!! منم هم با توجه به اینکه فک میکنم تنها کشوری هستیم که پول ترافیک میدیم خواستم که همین کار رو تو ابونتو هم انجام بدم که هی مجبور نصب برنامه ها نشم ولی خیلی خوب نشد!! به خاطر دیپندنسیها
خود برنامه رو میشه پکش کرد هم میشه سورسش و دانلود کرد یا اینکه نصب شده رو پک کرد ولی دیپندنسی ها ایراد داره!!

دوستان کیس راه حلی داره؟؟؟!!!

درود.

   البته این نکته رو مد نظر داشته باشید که چون اندروید از کرنل لینوکس استفاده می کنه به این معنا نیست که مدیر بسته ها و نرم افزارهایی که براشون نوشته میشن یکسان هستند. زیاد به این نکته نمیپردازیم چون موضوع اصلی این نیست و توضیح بیشتر ممکنه باعث بشه مطلب اصلی کمتر مورد توجه قرار بگیره

شما وقتی یک پکیج رو دانلود می کنین، نیازمندی هاش هم همراهش دانلود میشن و بسته به تنظیمات ممکنه فایل های نصاب تا مدت زمانی در مسیر مورد نظر وجود داشته باشن. میتونین از این فایل ها بک آپ بگیرین و بعدا نصب کنید. عموما این فایل ها در مسیر:
/var/cache/apt/archives
هستند

---------

توضیح در ارتباط با دلیل وجود dependency در بسته ها : هر نرم افزاری که نیازمندی خاصی داره، نیازمندی رو از طریق فراخوانی فایل مورد نظر اعلام می کنه و نه از طریق بسته ها. به عنوان مثال نرم افزار X نیاز به فایل کتابخانه ی libsomthing.so.0 در مسیر /lib داره. حال مهم نیست که پکیج A چنین فایلی رو تامین می کنه یا پکیج B، مهم اینه که فایل libsomething.so.0 در همون محلی باشه که نرم افزار X داره فراخوانیش می کنه.

1 -  یک راه اینه که ما در هنگام پکیج کردن نرم افزارامون بیایم این فایل های نیازمندی رو درون بسته قرار بدیم. اما این راه مناسبی نیست، چون این کتابخانه ها عموما اشتراکی بین چندین نرم افزار هستند و اگر فایل مورد نظر، دقیقا مطلوب نرم افزار خاصی نباشه، ممکنه نرم افزار به درستی کار نکنه. پس راه بهتر اینه که تا حد امکان پکیج ها فایل های یکسان در یک مسیر ایجاد نکنند، در نتیجه به جای اینکه تمامی فایل ها و کتابخانه هارو خود پکیج تامین کنه، میاد یه سری نیازمندی هارو در فایل بسته می نویسه تا تداخل رو تا حد امکان کمتر کنه.

2 - یک راه دیگه اینه که من بیام نیازمندیهارو (فایل ها و کتابخانه ها، نه بسته ها) در مسیری بریزم که متمایز با بقیه باشه. اونوقت فقط خود نرم افزار می تونه از اون فایل استفاده کنه.

 -  این کار برای نرم افزارهایی که در مسیر خانه ی کاربر نصب میشن معمول هستش و نرم افزار قابلیت حمل بالایی پیدا می کنه.
 - برای نرم افزارهایی که در مسیر ریشه در پوشه هایی که نیاز به دسترسی روت دارند، نصب میشن، این کار بی فایده هستش، چون فرض کنید نرم افزار X و Y هردو به فایل libsomething.so.0 نیاز دارند. نرم افزار X کتابخانه ی libsomething.so.0 رو در پوشه ی lib با نام libsomething.so.0.for.X ذخیره کرده ، نرم افزار Y هم همون فایل رو اومده با نام libsomething.so.0.for.Y ذخیره کرده. در واقع یک فایل دو بار کپی شده که اصلا نیاز به چنین کاری نبوده
همچنین این کار باعث میشه تعداد کد هایی که توسعه دهنده مورد بررسی قرار بده بالا بره، لذا وقت بیشتری رو برای عیب یابی قسمت های مختلف کد باید بزاره. در صورتی که فایل های کتابخانه ای مورد نیاز رو توسعه دهندگان دیگر مدیریت کنند، تمرکز توسعه دهنده بیشتر بر روی کد های خودش معطوف میشه
« آخرین ویرایش: 30 تیر 1395، 10:10 ب‌ظ توسط s1mpleworld »
با افتخار قدرت گرفته از Fedora 32

آفلاین Borderliner

  • Full Member
  • *
  • ارسال: 115
  • جنسیت : پسر
  • macOS Sierra 10.12.6
    • Borderliner | GitHub
پاسخ : پک کردن نرم افزار همراه با دیپندنسیها
« پاسخ #2 : 31 تیر 1395، 02:51 ب‌ظ »
سلام
اولین سوال!
تو اندریود میشه خیلی راحت با برنامه های مختلف اپی که نصب کردی و منتقل کنی به یه دیوایس دیگه!! خب میدونیم که اندروید هم یه جور لینوکسه!! منم هم با توجه به اینکه فک میکنم تنها کشوری هستیم که پول ترافیک میدیم خواستم که همین کار رو تو ابونتو هم انجام بدم که هی مجبور نصب برنامه ها نشم ولی خیلی خوب نشد!! به خاطر دیپندنسیها
خود برنامه رو میشه پکش کرد هم میشه سورسش و دانلود کرد یا اینکه نصب شده رو پک کرد ولی دیپندنسی ها ایراد داره!!

دوستان کیس راه حلی داره؟؟؟!!!

به نظر من Dependency Resolving سیستم کاملا خوبیه واسه ما کاربران ایرانی، چون برنامه هایی که Dependency مشترک دارن، دوباره دانلودش نمیکنن. در نتیجه هرچقد شما بیشتر برنامه دانلود کنید، به احتمال زیاد در آینده حجم کمتری رو دانلود خواهید کرد، چون Dependency های مشترک توی سیستم شما موجوده. برای مثال شما برای نصب Clementine، یک بار خود Clementine رو نصب میکنید و یک بار هم Qt5 برای شما نصب میشه. حالا اگه بخواید برنامه ای مثل SMPlayer رو نصب کنید، دیگه لازم نیست Qt5 رو دانلود کنه، چون درحال حاضر نصبه. ولی اگه بخواید به صورت فایلی مانند APK برنامه رو نصب کنید، هردفه باید Qt5 رو درکنار برنامه‌تون دانلود کنید و نصب کنید. به هرحال اگه واقعا احتیاج به بسته بندی نرم‌افزارتون دارید، میتونید از Snap‌ها استفاده کنید. http://snapcraft.io/
درواقع این Snap ها قادر به بسته بندی خود برنامه و Dependency هاشون هستن، و Snap Packages به صورت دیفالت در Ubuntu 16.04 پشتیبانی میشه. اگه از توزیع‌های لیونکس دیگه استفاده میکنید، پروژه های مشابه Snap هم وجود داره، مثل Flatpak و GNU Guix.
برای نصب بسته ها با استفاده از Snap، از دستور زیر استفاده کنید:
sudo snap install [package-name]
..::Borderliner::..

آفلاین saeedm69

  • Newbie
  • *
  • ارسال: 2
پاسخ : پک کردن نرم افزار همراه با دیپندنسیها
« پاسخ #3 : 04 امرداد 1395، 07:09 ب‌ظ »
اول از همه تشکر از جوابتون!!

من با نرم افزار dpkg-repack میتونم باینری برنامه اصلی تبدیل به یه پک deb کنم(یا حتی سورس فایل رو میشه دانلود کرد) اما اون deb رو وقتی میبرم رو سیستم دیگه نصب میکنم شروع میکنه dependency هاشو دانلود کردن!!

طبق جستوجو هایی که تو نت کردم خوندم متوجه شدم که یکی از مزیتهای لینوکس همین lib های اشتراکیش هستش که باعث میشه حجم برنامه ها کم بشه که این خیلی عالیه!!

حالا سوال جدیدی که پیش میاد اینکه آیا میشه این dependency هارو منتقل کرد یا کپی گرفت ازشون؟؟
اگر بشه اینطوری دیگه اون مشکل تداخل یا دوبار کپی شدن یه dependency در اثر پک جداگونه برنامه ها هم حل میشه!!
فقطنمدونم این dependency ها نصب شدنی هستن یا صرفا وجودشون کافیه!!
تا اونجایی که من فهمیدم ۳تا دایرکتوری هستش که فایلهای lib جمع میشن!!
  • /lib
  • /usr/lib
  • /usr/local/lib

یه سوال دیگه اینکه برنامه ای مثل chrome که داخل repository رسمی اوبونتو قرار نداره هم از این dependency یا lib های مشترک استفاده میکنه یا نه؟؟ یعنی با یه بار دانلود کردن برنامه اونو میشه رو هر سیستم دیگه ای نصب کرد یا نه!!



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

با تشکر!
« آخرین ویرایش: 04 امرداد 1395، 07:12 ب‌ظ توسط saeedm69 »

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19715
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : پک کردن نرم افزار همراه با دیپندنسیها
« پاسخ #4 : 06 امرداد 1395، 09:46 ق‌ظ »
حالا سوال جدیدی که پیش میاد اینکه آیا میشه این dependency هارو منتقل کرد یا کپی گرفت ازشون؟؟
بله

فقطنمدونم این dependency ها نصب شدنی هستن یا صرفا وجودشون کافیه!!
اگه وجود نداشته باشن، باید نصب شن

یه سوال دیگه اینکه برنامه ای مثل chrome که داخل repository رسمی اوبونتو قرار نداره هم از این dependency یا lib های مشترک استفاده میکنه یا نه؟؟
معمولاً بله

پ.ن: من نمیخوام از یه سیستم عامل به یه سیستم عامل دیگه برنامه رو منتقل کنم(میدونم اون پیچیدگیش خیلی زیاده)
نه خیلی
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن