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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: abramazani در 15 شهریور 1401، 12:35 ب‌ظ

عنوان: ساخت پکیج deb
ارسال شده توسط: abramazani در 15 شهریور 1401، 12:35 ب‌ظ
سلام
قبل از هر چیز این تاپیک (https://forum.ubuntu-ir.org/index.php?topic=154589) رو ببینید
خب بالاخره بعد از چند ماه جستجو برای ساخت یک پکیج deb از فایل پایتون رسیدم به این مقاله (https://www.pythonguis.com/tutorials/packaging-pyqt5-applications-linux-pyinstaller/) که خیلی کمکم کرد...
خب فایل deb رو با استفاده از کامند های زیر(برای اطلاعات بیشتر به لینک بالا مراجعه نمایید) ساختم و اینم نتیجه (https://s25.picofile.com/file/8452864384/mahab_1_0_0.deb.html)!
اینم (https://s25.picofile.com/file/8452847884/mahab_py_to_deb.zip.html) سورس و فایل های استفاده شده برای ساخت deb(به دلایلی نتونستم اینجا پیوست کنم)
pyinstaller mahab.spec
sudo apt install ruby
gem install fpm --user-install
mkdir -p package/opt
mkdir -p package/usr/share/applications
mkdir -p package/usr/share/icons/hicolor/scalable/apps
cp -r dist/mahab package/opt/mahab
# add icons(16x16/22x22/24x24/32x32/36x36/42x42/48x48/64x64) to package/usr/share/icons/hicolor/
cp mahab.desktop package/usr/share/applications
find package/opt/mahab -type f -exec chmod 644 -- {} +
find package/opt/mahab -type d -exec chmod 755 -- {} +
find package/usr/share -type f -exec chmod 644 -- {} +
chmod +x package/opt/mahab/mahab
fpm -C package -s dir -t deb -n "mahab" -v 1.0.0 -p mahab-1.0.0.deb --license MIT --url "https://abramazani.github.io/mahab" --maintainer "Abolfazl Ramazani <abolfazlramazani86@gmail.com>" --description "Preventing the battery from getting too low or too high" --category Utility

اما مشکلاتی که دارم:
خب اولین و مهم ترین مشکل من همینه!(مشکلی که در ساخت فایل exe اش هم همین مشکل رو داشتم) دیتابیس این نرم افزار sqlite3 هست و فایل دیتابیس میره و در پوشه Completed ذخیره میشه!
وقتی هم که برنامه install میشه فایل های پروژه میره توی پوشه opt که ویرایش فایل ها در این پوشه فقط با سطح دسترسی root امکان پذیره...
سوالی که دارم اینه آیا نیازه حتما به نرم افزار برای ویرایش data ها سطح دسترسی root داده بشه؟اگه بله خب چطور باید اینکار رو بکنم که به طور پیش فرض نرم افزار با سطح دسترسی ادمین اجرا بشه؟
یا اینکه میشه به یه فایل یا پوشه خاص این اجازه رو داد که کاربر عادی هم بتونه اونها رو ویرایش کنه؟
خب وقتی اومدم و نرم افزار رو با سطح دسترسی root اجرا کردم مشکلی که وجود داشت لود نشدن فونت ها بود!
من برای لود کردن فونت ها از pyglet استفاده می کنم و در حالت عادی هم مشکلی در استفاده از فونت ها نیست... اما وقتی فایل deb رو نصب می کنم و برنامه رو اجرا می کنم(با دسترسی root) اصلا فونت ها لود نمی شن و از فونت پیش فرض اوبونتو استفاده میشه!
خب در حالت عادی هر برنامه ای که نصب میشه وقتی در terminal اسم نرم افزار رو میزنی برنامه اجرا میشه...
اما وقتی من اسم نرم افزار(mahab) رو در terminal وارد می کنم با mahab: command not found مواجه میشم!!
آیا برای اینکه این اتفاق بیوفته باید کار خاصی انجام داد؟
خب این مشکل نیست!
برای دانلود و نصب یک برنامه راحت ترین و امن ترین راه استفاده از مخازن هست!(حالا توزیعش فرقی نمی کنه)
من چطور میتونم نرم افزار خودم رو هم به یکی از این مخازن اضافه کنم؟
تازگی ها چیزی رو دیدم به نام ppa که یه مخزن به روز هست که برای هر آپدیت نرم افزار نیاز نیست صبر کنیم تا مخزن بیاد آپدیت بده! میتونیم به روز نرم افزار رو نصب کنم... چطور می تونم یک ppa برای نرم افزارم داشته باشم؟

اگر مایل به مشارکت در این پروژه هستین به این لینک (https://github.com/AbRamazani/mahab-linux) سر بزنید!!
باتشکر...
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: behzad1 در 15 شهریور 1401، 01:10 ب‌ظ
۱.باید داخل نرم‌افزار دسترسی روت بگیرید، مشابه برنامه تنظیمات گنوم که هر وقت میخواد مثلا اطلاعات کاربر شمارو تغییر بده یا به چاپگر وصل بشه ازتون دسترسی می‌گیره. اینکار رو می‌تونید با کتابخونه Polkit انجام بدید.
۲.مشکل لود نشدن فونت ها برای این هست که نرم‌افزار رو روی کاربر روت اجرا کردید. کانفیگ کاربر شما با کاربر های دیگه فرق می‌کنه. شما اون فونت رو فقط روی کاربر و سیستم خودتون اعمال کردید.
۳.اول اینکه پکیج deb. چرا اینقدر حجمش بالاست؟!! حدود ۱۰۰ مگ! اون مقاله غلط گفته. اون پوشه opt/ برای چیه؟ چرا اینهمه کتابخونه و فایل اضافه شده و حجمش رو بالا برده؟ لینوکس مثل ویندوز نیست که همه کتابخونه و فایل‌ها توی یه فایل مثلا exe باشه. به‌جاش از وابستگی استفاده می‌شه و بخاطر همینه که حجم نرم‌افزار ها توی لینوکس کمه. پکیجتون داخل مخازن قرار نمی‌گیره اینطوری. مشکل اجرا نشدن هم این هست که رفتید فایل اجرایی رو داخل opt/mahab/ گذاشتید. این اصلا استاندارد نیست. باید داخل پوشه usr/bin/ قرار بگیره فایل اجراییتون. یه چندتا فایل deb. از مخازن بگیرید و ببینید چطوری کار می‌کنه. داکیومنت هم باید بخونید.
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: abramazani در 15 شهریور 1401، 10:11 ب‌ظ
نقل‌قول
به‌جاش از وابستگی استفاده می‌شه و بخاطر همینه که حجم نرم‌افزار ها توی لینوکس کمه.
میشه درباره وابستگی ها توضیح بدین؟
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: behzad1 در 15 شهریور 1401، 11:14 ب‌ظ
نقل‌قول
به‌جاش از وابستگی استفاده می‌شه و بخاطر همینه که حجم نرم‌افزار ها توی لینوکس کمه.
میشه درباره وابستگی ها توضیح بدین؟
ساده‌است، چطوری بگم، نرم‌افزار خودتون رو مثال میزنم. برای مثال نرم‌افزار شما به کتابخونه‌های
tkinter, psutil, PIL
نیاز داره. خب شما میاید چیکار می‌کنید؟ همه کتابخونه‌هارو داخل بسته deb قرار میدید؟ خیر. به بسته deb مشخص می‌کنید و می‌گید که نرم‌افزارم به کتابخونه‌های
python3-tk, python3-psutil, python3-pil
نیاز داره برو نصبش کن. (بقیه رو نگفتم چون داخل مخازن نبودند) بعد هم مدیربسته میره وابستگی‌های مدنظر رو نصب می‌کنه یا اگر از قبل در سیستم نصب شده بود اونارو دیگه دوباره نصب نمی‌کنه. علاوه بر این اگر نرم‌افزار دیگه ای به وابستگی های شما احتیاج داشتند (و بلعکس) هم دوباره نصب نمیشه و این میشه که حجم نرم‌افزار ها در مخازن گنو/لینوکس کم هست، و اگه دیدید حجم نرم‌افزار بزرگی مثل گیمپ چند مگابایت بیشتر نیست نباید تعجب کتید.
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: abramazani در 16 شهریور 1401، 11:35 ق‌ظ
ساده‌است، چطوری بگم، نرم‌افزار خودتون رو مثال میزنم. برای مثال نرم‌افزار شما به کتابخونه‌های
tkinter, psutil, PIL
نیاز داره. خب شما میاید چیکار می‌کنید؟ همه کتابخونه‌هارو داخل بسته deb قرار میدید؟ خیر. به بسته deb مشخص می‌کنید و می‌گید که نرم‌افزارم به کتابخونه‌های
python3-tk, python3-psutil, python3-pil
نیاز داره برو نصبش کن. (بقیه رو نگفتم چون داخل مخازن نبودند) بعد هم مدیربسته میره وابستگی‌های مدنظر رو نصب می‌کنه یا اگر از قبل در سیستم نصب شده بود اونارو دیگه دوباره نصب نمی‌کنه. علاوه بر این اگر نرم‌افزار دیگه ای به وابستگی های شما احتیاج داشتند (و بلعکس) هم دوباره نصب نمیشه و این میشه که حجم نرم‌افزار ها در مخازن گنو/لینوکس کم هست، و اگه دیدید حجم نرم‌افزار بزرگی مثل گیمپ چند مگابایت بیشتر نیست نباید تعجب کتید.
آها... خب فکر کنم با روشی که این مقاله گفته بود نمیشه همچین کاری کرد...
من قبلا روش های زیادی مثل stdeb و ... امتحان کردم ولی هیچ کدوم کار نمی کرد(شاید من راه رو اشتباه می رفتم)
آیا داکیومنت کامل و واضحی در این باره هست؟
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: behzad1 در 16 شهریور 1401، 12:07 ب‌ظ
https://bmbgk.ir/?q=Packaging+for+debian
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: abramazani در 16 شهریور 1401، 01:04 ب‌ظ
https://bmbgk.ir/?q=Packaging+for+debian
:-k :-k خب اگه جواب رو توی گوگل پیدا می کردم وقت شما رو نمی گرفتم!
همین مقاله رو هم اتفاقی پیدا کردم...
فردی رو نمی شناسید که در این زمینه تجربه داشته باشه یا قبلا همچین کاری کرده باشه!
مثلا نرم افزارایی مثل پرسپولیس که با زبان پایتون نوشته شدن رو دارم بررسی می کنم که چطور موفق به ساختن پکیج deb شدن...
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: behzad1 در 16 شهریور 1401، 01:22 ب‌ظ
جواب‌ها تو همون لینکی است که دادم. چطور پیدا نکردید؟ همون هایی که پکیج deb ساختند هم گوگل کردند
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: دانیال بهزادی در 20 شهریور 1401، 02:46 ب‌ظ
سلام
قبل از هر چیز این تاپیک (https://forum.ubuntu-ir.org/index.php?topic=154589) رو ببینید
خب بالاخره بعد از چند ماه جستجو برای ساخت یک پکیج deb از فایل پایتون رسیدم به این مقاله (https://www.pythonguis.com/tutorials/packaging-pyqt5-applications-linux-pyinstaller/) که خیلی کمکم کرد...

بهتره این کار رو به روش استاندارد، یعنی با ساخت شاخهٔ Debian انجام بدی. برای مثال این‌جا رو ببین:
https://salsa.debian.org/danialbehzadi/tractor/-/commit/0f091bcac0a529b74fec512801d5f9f0a1935dae


  • برای اجرای نرم افزاز نیاز به سطح دسترسی root هست!

نباید پایگاه داده رو در مسیر ریشه بذاری. دقیقاً کارش چیه اون پایگاه. شاید بهتر باشه بذاریش تو پرونده‌های پیکربندی کاربر.


  • مشکل در لود فونت ها

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


  • اجرای برنامه توسط termianl

باید براش یه entry point بسازی. برای مثال این‌جا رو ببین:
https://framagit.org/tractor/tractor/-/blob/main/setup.py#L53


  • اضافه کردن نرم افزار به مخازن اوبونتو
خب این مشکل نیست!
برای دانلود و نصب یک برنامه راحت ترین و امن ترین راه استفاده از مخازن هست!(حالا توزیعش فرقی نمی کنه)
من چطور میتونم نرم افزار خودم رو هم به یکی از این مخازن اضافه کنم؟
اصولی‌ترین راه، فرستادن یه ITP به دبیان است:
https://www.debian.org/doc/manuals/developers-reference/pkgs.en.html


تازگی ها چیزی رو دیدم به نام ppa که یه مخزن به روز هست که برای هر آپدیت نرم افزار نیاز نیست صبر کنیم تا مخزن بیاد آپدیت بده! میتونیم به روز نرم افزار رو نصب کنم... چطور می تونم یک ppa برای نرم افزارم داشته باشم؟
PPAها فقط برای اوبونتو کار می‌کنن. برای داشتنش باید یه پروژه توی https://launchpad.net بسازی.
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: abramazani در 20 شهریور 1401، 08:03 ب‌ظ
نباید پایگاه داده رو در مسیر ریشه بذاری. دقیقاً کارش چیه اون پایگاه. شاید بهتر باشه بذاریش تو پرونده‌های پیکربندی کاربر.
مثل هر دیتابیس دیگه ای دیتا ذخیره میکنه خب!! یه سری اطلاعات درباره کاربر و یه سری تنظیمات برای برنامه...
[پرونده‌های پیکربندی کاربر]؟؟؟؟؟

استفاده از قلم‌های دیگه جز در مواردی که برنامه تمام‌صفحه اجرا می‌شه، مجاز نیست و برنامه‌ها باید از قلم نشست استفاده کنن.
منظورتون از تمام صفحه و فونت نشست چیه؟
آخه چرا نمیشه از فونت دلخواه استفاده کرد!
فونت خود توزیع که توی حالت فارسی خیلی زشته...
عنوان: پاسخ : ساخت پکیج deb
ارسال شده توسط: دانیال بهزادی در 21 شهریور 1401، 10:59 ق‌ظ
مثل هر دیتابیس دیگه ای دیتا ذخیره میکنه خب!! یه سری اطلاعات درباره کاربر و یه سری تنظیمات برای برنامه...
برای ذخیرهٔ داده‌ها بهتره از Gsettings استفاده کنی:
https://docs.gtk.org/gio/class.Settings.html

منظورتون از تمام صفحه و فونت نشست چیه؟
تمام‌صفحه حالتیه که مثلاً بازی‌ها توش اجرا می‌شن. توی حالت تمام‌صفحه دیگه به محیط میزکار دسترسی نداری.

آخه چرا نمیشه از فونت دلخواه استفاده کرد!
فونت خود توزیع که توی حالت فارسی خیلی زشته...
گزینش قلم استفاده شده به عهدهٔ کاربره. ممکنه کاربری مشکل بینایی داشته باشه و نیاز باشه از قلمی خاص استفاده کنه.