البته تا حد توانایی خودم توانستم ، از روش دوم( یعنی debuild ) فایل deb. را بسازم.
چون برنامه نویس نیستم ، اینکار برایم سخت بود و در عین حال جالب هم بود.
نتایجی که بدست آوردم برای استفاده علاقمندان در اینجا قرار میدهم .
برای ساخت فایل deb. از سورس ، روشهای گوناگونی وجود دارد.
سادهترین راهی که بخواهید در نظر بگیرید استفاده از دستور sudo checkinstall می باشد.
با این مراحل:
۱- extract کردن فایل تاربال.
۲- رفتن به داخل پوشه extract شده.
(توجه شود در این روش تغییر نام پوشه extract شده برای ادامه کار اجباری نیست ، ولی سعی کنید که اگر از این روش استفاده میکنید ، اگر نام پوشه extract شده شما با نام یکی از بسته های موجود در مخازن اصلی توزیعتان یکی باشد ، حتماً نام پوشه extract شده را به نام دیگری تغییر بدهید.)
۳-در این روش برخلاف روش debuild نیازی به ساختن پوشه debian و متعلقات آن در داخل پوشه extract شده سورس نمی باشد.
۴- بنظر میرسد برای گرفتن نتیجه درست از این روش بایستی فایل Makefile در پوشه سورس تان باشد.اگر نباشد خودتان بایستی آنرا بسازید. چون در این مثال چنین فایلی در پوشه سورس موردنظرم وجود نداشت ،آقای Dragon- زحمت آنرا برایم کشیدند.
۵- استفاده از دستور sudo checkinstall
با استفاده از این دستور علاوه بر اینکه این نرمافزار در سیستمتان نصب میشود که پکیج منیجر سیستمتان قادر به شناسایی و همچنین حذف آن میباشد ، یک فایل deb. ای در اختیارتان خواهد بود که هر وقت که خواستید دوباره با استفاده از این فایل دوباره آنرا نصب کنید.
۶- اگر خواستید بعد از حذف این نرمافزار با استفاده از فایل deb. آنرا دوباره نصب کنید ، حتماً یادتان باشد که در مراحل نصب در پاسخ به سؤال y/N ، همینطوری فقط کلید اینتر را نزنید ، در این حالت نرمافزار برایتان نصب نخواهد شد ، ضروری است که حتماً حرف y را تایپ کرده و سپس اینتر را بزنید.(عکس 1)
خوب میرسیم به روش دوم(debuild) برای ساخت فایل deb. از سورس:
۱- extract کردن فایل تاربال.
۲- رفتن به داخل پوشه extract شده.
۳- در اینجا چون پوشه سورس ام فاقد پوشه دبیان و متعلقات آن میباشد ( و معمولاً در بیشتر موارد خودتان بایستی بسازید) .
''Debianization''
After the first compilation, it's time to create the Debian specific part of the package.
Debianize the package by using dh_make or one of the other automatic packaging tools.
https://wiki.debian.org/HowToPackageForDebianیعنی اگر میخواهید از پوشه سورس ، فایل deb. بسازید ، بایستی در پوشه سورستان پوشه ای بنام debian با فایلهای درون آن بسازید که به این عمل Debianization میگویند ، که این عمل هم میتواند بصورت دستی و یا با استفاده از ابزارهایی مانند dh_make بسازید ولی در اکثریت موارد باز هم نیازمند ویرایش فایلهای درون پوشه debian هستید.
دستوری که باید بکار ببرید:
dh_make --createorig
همانطور که در عکس 2 میبینید ، این دستور خطا داده است. خطایش هم این است که شما تنها مجازید در اسم پوشه ای که میخواهید در درون آن این دستور dh_make را اجرا بکنید ، تنها میتوانید از حروف کوچک و اعداد بین صفر تا ده و همچنین علامت های + و – و . استفاده کنید.
بنابراین در اینجا من اسم پوشه را از Orchis-theme-2022-05-29 به orchis-1 تغییر نام می دهم.
(همانطور که در sudo checkinstall گفتم ، تغییر نام پوشه برای آن روش اجباری نیست)
با اجرای این دستور از شما سؤال پرسیده می شود:
Type of package: (single, indep, library, python)
[s/i/l/p]?
در اینجا کلید s را فشار بدهید.( البته با توجه به نوع کارتان میتوانید گزینه های دیگر را انتخاب نمایید.)
بعد می پرسد:
Are the details correct? [Y/n/q]
که در اینجا کلید y را فشار بدهید.( عکس 3)
این دستور دو تا ماحصل دارد:
الف) ایجاد پوشه دبیان و فایلهای درونش.
ب) ایجاد فایلی با پسوند orig.tar.xz. در بیرون از پوشه اکسترکت شده.( در اینجا برای من فایلی بنام orchis_1.orig.tar.xz ایجاد می شود،که البته با آن کاری ندارم.)
همانطور که در انتها اشاره شده:
Done. Please edit the files in the debian/ subdirectory now.
بایستی تشریف ببریم و فایلهای درون پوشه debian را ویرایش نماییم. میتوانیم بدون توجه به این مورد به کارمان ادامه بدهیم و فایلی بنام deb. با دستور بعدی بگیریم ولی این فایل ناکارآمد است .
همانطور که میدانید برای این مورد من خواستم از Makefile ای که برای روش قبلی استفاده کردم برای این روش استفاده کنم ولی فایدهای نداشت.
ما در ساخت فایل deb. عمدتا با دو نوع از Dependency سروکار داریم :
الف) Build-Depends
ب)Depends
Build-Depends : بسته هایی که فقط در طول زمان ساخت استفاده میشود و بایستی روی رایانه توسعهدهنده باشد.( مثلاً بسته debhelper )
ولی depends ، بسته هایی هستند که باید بر روی ماشین های کاربران نصب شود.
برای اطلاع از ایندو میتوانیم به README نرم افزاری که بر روی آن کار میکنیم مراجعه کنیم.
برای ویرایش وابستگیها برای پکیج خودمان به فایل control درون پوشه debian مراجعه میکنیم.
البته این فایل تنظیمات دیگری هم دارد که فعلاً برای من لازم نبودند.
فایل control من برای این برنامه:
Source: orchis
Section: unknown
Priority: optional
Maintainer: a <a@unknown>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.5.1
Homepage: <insert the upstream URL, if relevant>
#Vcs-Browser: https://salsa.debian.org/debian/orchis
#Vcs-Git: https://salsa.debian.org/debian/orchis.git
Rules-Requires-Root: no
Package: orchis
Architecture: any
Depends:
gtk2-engines-murrine (>= 0.98),
${misc:Depends}
Description: this is a theme.
یک فایل بسیار مهم ، شاید مهمترین فایل پوشه debian ، فایلی است بنام rules .
ما باید کاری بکنیم تا فایل ها را در مکان مناسب نصب کند ، مشابه کار Makefile
در اینجا این فایل rules با کدنویسی سروکار دارد.
چون من برنامه نویس نیستم و از کد سر در نمیآورم ( خیلی وقت پیش سعی کرده بودم که به زبانهای برنامه نویسی سی و سی پلاس پلاس و سی شارپ و php و همچنین بانک اطلاعاتی مای اسکویل نظری بیاندازم ولی برایم خیلی سخت بودند، بنابراین بی خیالشان شدهام و سعی میکنم زندگیم تا حد ممکن بدون کد باشد!)
خلاصه مجبور شدم قضیه کدها را با تقلب حل کنم. در مخازن اصلی دبیان پایدار تا آنجایی که بررسی کردم بسته murrine-themes تا حدودی میتوانست به دادم برسد و از منجلاب کد ندانستن نجاتم بدهد. بنابراین سورس این بسته را از طریق زیر بدست آوردم.( البته اگر برای شما این دستور برای این بسته و یا بسته دیگری کار نکرد، احتمالا بایستی فایل etc/apt/sources.list/ را ویرایش بفرمایید.):
sudo apt source murrine-themes
از ویژگیهای open source در اینجا بهره می گیرم و فایل rules پوشه debian ام را حذف میکنم و شیرجه میزنم تا بجایش از فایل rules بسته murrine-themes استفاده نمایم. کدهای این فایل:
#!/usr/bin/make -f
THEMES_DIR=debian/murrine-themes/
build: build-arch build-indep
build-arch: build-stamp
build-indep: build-stamp
build-stamp:
dh_testdir
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp
dh_clean
install: build
dh_testdir
dh_testroot
dh_prep
dh_installdirs
cp -r usr $(THEMES_DIR)
find $(THEMES_DIR) -name COPYING -exec rm '{}' \;
find $(THEMES_DIR) -name gtkrc -exec sed -i 's/gtk-tooltips/gtk-tooltip*/' '{}' \;
# dh_fixperms ignores /usr/share/themes
chmod -R 0644 $(THEMES_DIR);
chmod -R +X $(THEMES_DIR);
binary-indep: build install
dh_testdir
dh_testroot
dh_installdocs
dh_installchangelogs
dh_fixperms
dh_compress
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
ادامه کار برایم این امر را نشان میدهد که بایستی یک تغییراتی در این کدها بدهم تا برایم کار بکنند. دو تا تغییر می دهم:
بجای سطر:
/THEMES_DIR=debian/murrine-themes
این را بکار می برم:
/THEMES_DIR=debian/orchis
تا این حد امتحان کردم برنامه کار نکرد و بناچار یک سطر اینطوری به کدها اضافه می کنم، شاید کار بکند:
cp -r usr/share/themes $(THEMES_DIR)
و فایل rules ام با ویرایش هایی که انجام دادم بدین صورت در می آید:
#!/usr/bin/make -f
THEMES_DIR=debian/orchis/
build: build-arch build-indep
build-arch: build-stamp
build-indep: build-stamp
build-stamp:
dh_testdir
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp
dh_clean
install: build
dh_testdir
dh_testroot
dh_prep
dh_installdirs
cp -r usr/share/themes $(THEMES_DIR)
cp -r usr $(THEMES_DIR)
find $(THEMES_DIR) -name COPYING -exec rm '{}' \;
find $(THEMES_DIR) -name gtkrc -exec sed -i 's/gtk-tooltips/gtk-tooltip*/' '{}' \;
# dh_fixperms ignores /usr/share/themes
chmod -R 0644 $(THEMES_DIR);
chmod -R +X $(THEMES_DIR);
binary-indep: build install
dh_testdir
dh_testroot
dh_installdocs
dh_installchangelogs
dh_fixperms
dh_compress
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
و حالا یک قسمت دیگری میماند که در ارسالی بالاترم خواستم این موضوع را دوستان راهنمایی بکنند و تا دوستان بخواهند راهنمایی بکنند ، مجبورم تا از یک تقلب دیگری استفاده کنم تا این پروژه ، روی زمین نماند . موضوعی که با آن دست به گریبان هستم این است که در فایل deb. ای که از روش قبلی بدست آوردم ، پوشه ای بنام themes وجود دارد که در داخلش theme های برنامه هستند ، ولی چهجوری در اینجا این عمل را انجام بدهم خودش مساله است، چون چیزی به ذهنم فعلاً نمیرسد ، میروم از پوشه usr/ و محتویات آن از فایل deb. قبلی یک کپی برمیدارم و میاورم و میگذارم در مسیر پوشه اکسترکت شده ام.
الان میرسد به دستور بعدی:
debuild -rfakeroot -uc -us -b -d
این دستور خطا میدهد( عکس 4) و بناچار از این دستور استفاده می کنم:
sudo debuild -rfakeroot -uc -us -b -d
با این روش بلاخره فایل deb. ایجاد میشود( عکس 5) و برخلاف روش sudo checkinstall که هم برنامه نصب میشود و هم یک فایل deb. به شما میدهد ، در این روش برنامه با اجرای دستور debuild بر روی سیستم نصب نمیشود و تنها یک فایل deb. به شما داده میشود که میتوانید آنرا بر روی سیستمتان نصب نمایید.
برنامه را نصب میکنم و توسط پکیج منیجر سیستم به خوبی شناخته میشود .(عکس 6)
اگر در رابطه با ارتقا روش بالایی که بیشتر بصورت تجربی بدست آوردم ، مطالبی داشتید، بفرمایید، ممنون می شوم.
البته خودم هم سعی میکنم که روش بالایی را تا حد ممکن بهینه کنم.