انجمنهای فارسی اوبونتو
جامعه کاربران => کافه اوبونتو => نویسنده: norouzi90 در 19 تیر 1401، 08:35 قظ
-
با سلام،
کدام استایل (تم) و آیکن و فونت را بیشتر دوست دارید؟
لطفاً معرفی بفرمایید تا من هم آنها را امتحانی بکنم.( البته فرقی نمیکند در داخل مخازن باشد یا نه ، عجب شجاعتی !!)
خودم بیشتر فونت Monoid Bold و در آیکن ها papirus و gnome-brave را دوست دارم.
و در استایل ها فعلاً به جایی نرسیده ام!!
-
اینا اصلا مهم نیست و سلیقه ای است.
وقت خود را تلف نکنید.
-
من هم papirus رو دوست دارم.
-
تم دارک خود پلاسما با بسته ایکون fluent
-
اینا اصلا مهم نیست و سلیقه ای است.
وقت خود را تلف نکنید.
الان خودت به اندازهی نوشتن دو تا جملهی بهدردنخور وقت تلف کردی.
-
اینا اصلا مهم نیست و سلیقه ای است.
وقت خود را تلف نکنید.
الان خودت به اندازهی نوشتن دو تا جملهی بهدردنخور وقت تلف کردی.
سه تا
-
چهار تا جمله که دوتاش نصیحت هست وقت تلف کردن نیست.
ولی این دو تای دیگش آره وقت تلف کردنه. :))
-
اینا اصلا مهم نیست و سلیقه ای است.
ایشون هم البته نگفته مهمه. واسه تفریح توی بخش کافه اوبونتو اومده یه سوالی پرسیده ببینه سلیقه بقیه چیه، شاید بقیه چیزای قشنگتری معرفی کنن که براش تنوع بشه.
ضمن اینکه زیبایی محیط کاری نرم افزار باعث میشه محیط تکراری و خسته کننده ای رو نداشته باشیم :) اتفاقا کار باحالیه
وقت خود را تلف نکنید.
اینکه برای خودش وقت میذاره تا محیط قشنگ و مورد سلیقه ش رو درست کنه وقت تلف کردن نیست. چه موقع به خودش برسه؟ وقتی 60 سالش شد؟ دیگه به چه کارش میاد. باید از زندگی لذت برد.
این خیلی خوبه که یه تایم کوتاهی رو آدم به چیزایی که دوست داره اختصاص بده. روحیه ش هم عوض میشه.
-
با سلام،
کدام استایل (تم) و آیکن و فونت را بیشتر دوست دارید؟
لطفاً معرفی بفرمایید تا من هم آنها را امتحانی بکنم.( البته فرقی نمیکند در داخل مخازن باشد یا نه ، عجب شجاعتی !!)
خودم بیشتر فونت Monoid Bold و در آیکن ها papirus و gnome-brave را دوست دارم.
و در استایل ها فعلاً به جایی نرسیده ام!!
تاپیک نماگرفت از دسکتاپ گنو/لینوکسی انجمن معمولا به خوبی توضیح دادن به همراه عکس
-
می خواهم theme هایی که خارج از مخازن نصب می کنم ، پکیج منیجر سیستمم بشناسد.
در اینجا یک اشکالی دارم، مثلا می خواهم تم Orchis-theme-2022-05-29 را نصب کنم .
https://github.com/vinceliuice/Orchis-theme/releases (https://github.com/vinceliuice/Orchis-theme/releases)
طبق فایل README.md :
## Requirements
- GTK `>=3.20`
- `gnome-themes-extra` (or `gnome-themes-standard`)
- Murrine engine — The package name depends on the distro.
- `gtk-engine-murrine` on Arch Linux
- `gtk-murrine-engine` on Fedora
- `gtk2-engine-murrine` on openSUSE
- `gtk2-engines-murrine` on Debian, Ubuntu, etc.
- `sassc` — build dependency
## Installation
### Manual Installation
Run the following commands in the terminal:
```sh
./install.sh
```
طبق این روش می توانم این تم را نصب کنم و در قسمت Style سیستم نشان داده می شود.
و در این باره هیچ مشکلی ندارم.
برای اینکه با checkinstall نصبش کنم مجبور شدم نام پوشه را از Orchis-theme-2022-05-29
به orchis-1.1 تغییر بدهم.
ولی می خواهم با checkinstall هم نصب کنم تا پکیج منیجر سیستمم آنرا بشناسد ، در synaptic
نشان می دهد که نصب شده ولی چرا به لیست Style های سیستم اضافه نمی شود؟!
-
ببینید اصلا چه فایلهایی داخل اون بسته deb قرار داره.
dpkg -c /path/to/file.deb
به جای path/to/file.deb/، مسیر به جایی که فایل deb قرار داره رو بنویسید.
با توجه خروجی checkinstall، مسیر باید این باشه
/home/a/Documents/orchis-1.1/orchis_1.1-1_amd64.deb
پس دستور میشه این:
dpkg -c /home/a/Documents/orchis-1.1/orhcis_1.1-1_amd64.deb
-
عکسهای مربوطه:
-
مشخصه مشکل از کجاست. هیچ فایلی که شامل تم باشه، داخل اون بسته deb قرار نداره.
فکر کنم مشکل به خاطر این هست که checkinstall سعی میکنه make رو اجرا کنه.
از اونجایی که این پروژه از make استفاده نمیکنه و با چنتا اسکریپت bash کارها رو انجام میده، checkinstall هم هیچ فایل که شامل تم باشه رو شناسایی نمیکنه و در نهایت بستهای میسازه که شامل تم نیست.
یه راه حل میتونه این باشه که اسکریپتهای این پروژه رو به Makefile تبدیل کنید. یه نگاه به اسکریپتها انداختم، نباید کار خیلی سختی باشه.
یه راه دیگه اینه که کاری کنید تا checkinstall سعی کنه به جای make، اسکریپت install.sh رو اجرا کنه.
راه آخری که به ذهنم میرسه اینه که خودتون یه Makefile توی دایرکتوری پروژه بسازید و این رو داخلش قرار بنویسید.
.PHONY: install
install:
./install.sh
میتونید آپشنهای مورد نیاز رو هم به اسکریپت install.sh بدید تا تمی که میخواهید رو نصب کنه.
اگه این متن رو کپی میکنید، با یه ویرایشگر متن اون هشت تا فاصله رو تبدیل به یه tab کنید. در غیر اینصورت make به اون گیر میده و اجرا نمیشه.
نمیدونم Makefile بالا مناسب هست یا نه. مطمئن هم نیستم کار کنه. (ولی احتمالا کار میکنه)
-
راه آخری که به ذهنم میرسه اینه که خودتون یه Makefile توی دایرکتوری پروژه بسازید و این رو داخلش قرار بنویسید.
.PHONY: install
install:
./install.sh
آفرین . =D>
( اگر در رابطه با این کد بیشتر توضیح بدهید، سپاسگزار خواهم بود.)
-
فایل deb. در ارسالی گذشته ام که با کمک آقای Dragon- ایجاد کرده بودم، بدون هیچ مشکلی کار می کند .
حتی با حذف از طریق پکیج منیجر ، بدون هیچ مشکلی از روی سیستم حذف می شود.
اینبار می خواهم این فایل deb. را از طریق دیگری ایجاد نمایم. ولی در این روش با مشکل روبرو می شوم.
مانند مثال قبلی (قبل از اصلاح) در سیستم نصب می شود ولی چون هیچ فایلی که شامل تم باشه، داخل اون بسته deb قرار ندارد،
کار نمی کند و چیزی به قسمت Style در Appearance اضافه نمی شود و فقط نشان می دهد که به صورت ظاهری به Synaptic اضافه شده است.
راهکار قبلی را خواستم برای این روش ساخت فایل deb. استفاده کنم، یعنی ساختن Makefile ولی فایده نداشت .
-
( اگر در رابطه با این کد بیشتر توضیح بدهید، سپاسگزار خواهم بود.)
You need a file called a makefile to tell make what to do. Most often, the makefile tells make how to compile and link a program.
https://www.gnu.org/software/make/manual/make.html (https://www.gnu.org/software/make/manual/make.html)
.PHONY
The prerequisites of the special target .PHONY are considered to be phony targets. When it is time to consider such a target, make will run its recipe unconditionally, regardless of whether a file with that name exists or what its last-modification time is. See Phony Targets.
https://www.gnu.org/software/make/manual/html_node/Special-Targets.html#Special-Targets (https://www.gnu.org/software/make/manual/html_node/Special-Targets.html#Special-Targets)
4.6 Phony Targets
A phony target is one that is not really the name of a file; rather it is just a name for a recipe to be executed when you make an explicit request. There are two reasons to use a phony target: to avoid a conflict with a file of the same name, and to improve performance.
https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html (https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html)
By default, Makefile targets are "file targets" - they are used to build files from other files.
However, sometimes you want your Makefile to run commands that do not represent physical files in the file system.
https://stackoverflow.com/questions/2145590/what-is-the-purpose-of-phony-in-a-makefile (https://stackoverflow.com/questions/2145590/what-is-the-purpose-of-phony-in-a-makefile)
The Makefile
To use make in your project, you need to have a file named Makefile at the root of your project. This file instructs make on what to do. The Makefile consists of a set of rules. Each rule has 3 parts: a target, a list of prerequisites, and a recipe.
Note that there are tabs before the recipe lists. Anything other than tabs will result in an error.
The target represents a goal that you want to achieve, usually this is a file that needs to be created in your build. The prerequisites list tells make which files are this target dependent on. The prerequisites can be a file or another target. Finally the recipes are a list of shell commands that will be executed by make as part of building the target.
https://earthly.dev/blog/python-makefile (https://earthly.dev/blog/python-makefile)
خلاصه یک آدم بیکار می خواهد که یک عمر بنشیند و بنشیند تا ببیند که درد این Makefile بی زبون نامهربون چیه؟!
-
با سلام مجدد.
۱- در نصب فایل های بصورت deb. با استفاده از gdebi در محیط گرافیکی root، بر روی آن
فایل کلیک راست کرده و فرآیند نصب صورت می گیرد ولی نمی دانم چرابرای کاربر فعلی ام که عضو sudo هم است ،
هر چند که گزینه gdebi برای در منو کلیک راست برای آن می آید ولی بعد از زدن دگمه Install Package هیچ گونه اتفاقی نمی افتد و فرآیند نصب
صورت نمی گیرد و مجبورم بصورت خط فرمان از gedbi در محیط کاربر فعلی ام استفاده نمایم،یعنی :
sudo gdebi file.deb
۲-برای راحتی کار برای ساخت پکیج های deb. از source code ، چندین برنامه مانند debianizer و debreate و debmaker و...
ایجاد شده است، خواستم نصبشان کنم ولی کار نکردند ، این مشکلات پیش آمدند:
برای debianizer بعد از نصب این مشکل پیش آمد.( عکس Debianizer.png )
برای debreate در زمان نصب این error را می دهد.( عکس debreate.png ) در مخازن دبیان بسته ای بنام wxgtk3.0 و wxgtk2.8 وجود ندارد.
برای debmaker ، اصلا نمی توانم نصبش کنم.( عکس debmaker.png ) چرا نصب نمی شود؟ چرا فایل هایی مانند Makefile یا install.sh و ... ندارد؟!
آیا بغیر از اینها ، برنامه دیگری در این زمینه می شناسید؟
۳- در فولدر دبیان ، فایلی بنام control است. در داخل این فایل قسمتی است بنام Depends ، کدامیک از موارد زیر را می خواهیم به این Depends معرفی کنیم:
منظور Requirements قید شده در فایل README.md :
مثلا :
## Requirements
- GTK `>=3.20`
- `gnome-themes-extra` (or `gnome-themes-standard`)
- Murrine engine — The package name depends on the distro.
- `gtk-engine-murrine` on Arch Linux
- `gtk-murrine-engine` on Fedora
- `gtk2-engine-murrine` on openSUSE
- `gtk2-engines-murrine` on Debian, Ubuntu, etc.
- `sassc` — build dependency
یا عناصر موجود در فولدر release است که می خواهیم به برنامه معرفی کنیم . ( عکس release.png )
برای ساخت فایل deb. در مبحث Depends ، بغیر از این فایل control ، جای دیگری لازم نیست که وابستگی ها را به برنامه معرفی بنماییم؟
۴- بسته equivs چه کمکی در این زمینه می تواند برایم داشته باشد؟
-
( اگر در رابطه با این کد بیشتر توضیح بدهید، سپاسگزار خواهم بود.)
اون PHONY. باعث میشه که make، هدف install رو مربوط به یه فایل ندونه.
اگه PHONY. مشخص نمیشد و یه فایل به اسم install داخل جایی قرار داشت که make install رو اجرا میکردید، اونوقت make کار خاصی انجام نمیداد چون فایلی به همین اسم اونها وجود داره.
این (https://maktabkhooneh.org/course/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-make-file-mk1008/) یه آموزش فارسی کوتاهه که میتونید ببینید و در مورد Makefile ها اطلاعات بدست بیارید.
در مورد عکس اولی که توی همین ارسال گذاشتید، میتونید Architecture رو به all تغییر بدید. از اونجایی که این بسته فقط شامل یه سری تم هست و به چیز خاصی نیاز نداره، مهم نیست معماری پردازنده چی باشه. در هر صورت میشه از اون استفاده کرد.
هر چند توی این شرایط، فرق زیادی نداره که all باشه یا نه چون فقط قراره روی سیستم شما نصب بشه. قرار نیست وارد یه مخزن عمومی بشه.
اینبار می خواهم این فایل deb. را از طریق دیگری ایجاد نمایم. ولی در این روش با مشکل روبرو می شوم.
مانند مثال قبلی (قبل از اصلاح) در سیستم نصب می شود ولی چون هیچ فایلی که شامل تم باشه، داخل اون بسته deb قرار ندارد،
کار نمی کند و چیزی به قسمت Style در Appearance اضافه نمی شود و فقط نشان می دهد که به صورت ظاهری به Synaptic اضافه شده است.
راهکار قبلی را خواستم برای این روش ساخت فایل deb. استفاده کنم، یعنی ساختن Makefile ولی فایده نداشت .
اگه میخواهید با debhelper و debuild بسته deb بسازید، باید چیزهای بیشتری رو در نظر بگیرید.
این (https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging) یه راهنمای مناسب برای شروع هست.
از اینجا (https://wiki.debian.org/HowToPackageForDebian) میتونید لینک و منبع به بقیه راهنماها رو پیدا کنید. (یه لینک به راهنمای بالایی هم هست)
بهتره در مورد ساختار بستههای deb و وظیفه فایلهای داخل اون اطلاعات بدست بیارید. فعلا اینها رو ببینید: deb-dsc(5) deb(5) deb-control(5)
برای اطلاعات بیشتر میتونید اینها رو هم ببینید: deb-conffiles(5) deb-md5sums(5)
بعد میتونید صفحات man مربوط postinst preinst postrm prerm رو ببینید: deb-postinst(5) deb-preinst(5) deb-postrm(5) deb-prerm(5)
در آخر میتونید deb-triggers(5) و deb-shlibs(5) رو ببینید. ولی ممکنه اینها یکم سخت باشند.
این صفحات man همراه بسته dpkg-dev هستند. یه سری صفحه man دیگه هم همراه این بسته هستند. میتونید اونها رو هم ببینید.
میتونید اینجوری ببینید چه man هایی به زبان انگلیسی همراه بسته dpkg-dev هست:
dpkg -L dpkg-dev | grep '/usr/share/man/man[1-9]'
برای debianizer بعد از نصب این مشکل پیش آمد.( عکس Debianizer.png )
به نظر میاد این برنامه با java نوشته شده. برای اجرای اون، به محیط اجرایی جاوا (jre) نیاز دارید.
بسته openjdk-11-jre یا openjdk-17-jre رو نصب کنید. اولی نسخه ۱۱ جاوا هست و دومی نسخه ۱۷.
برای debreate در زمان نصب این error را می دهد.( عکس debreate.png ) در مخازن دبیان بسته ای بنام wxgtk3.0 و wxgtk2.8 وجود ندارد.
مگه اون رو از مخازن نصب نمیکنید؟ اگه اینجوره پس باید وابستگیهاش هم همراهش نصب بشن. یا اینکه برای اون برنامه، مخزن جدا اضافه کردید؟
در ضمن طبق چیزی که توی عکس هست، به بستههای python-wxgtk3.0 و python-wxgtk2.8 نیاز داره.
از اونجایی که توی دبیان و همینطور مینت، از پایتون ۳ استفاده میشه، شاید اسم اسم بستهها python3-wxgtk3.0 و python3-wxgtk2.8 باشه.
توی دبیان چنین بستههایی نیست. ولی بسته python3-wxgtk4.0 وجود داره.
برای debmaker ، اصلا نمی توانم نصبش کنم.( عکس debmaker.png ) چرا نصب نمی شود؟ چرا فایل هایی مانند Makefile یا install.sh و ... ندارد؟!
لازم نیست حتما یه Makefile یا install.sh اونجا باشه. توسعهدهنده میتونه با هر روشی که میخواهد، برنامه رو کامپایل کنه.
توی هون فایل Readme.md گفته چیکار کنید.
این برنامه با go نوشته شده. برای اینکه بتونید اون رو کامپایل کنید، باید ابزارهای مورد نیاز رو داشته باشید.
اول بسته golang-go رو نصب کنید تا چیزهای مورد نیاز نصب بشن.
sudo apt install golang-go
بعد طبق چیزی که توی فایل Readme.md گفته، به این شکل برنامه رو دریافت و کامپایل کنید:
go get github.com/linuxerwang/debmaker
فکر کنم بعد از اینکار، فایلهای اجرایی داخل دایرکتوری پروژه قرار میگیرن.
آیا بغیر از اینها ، برنامه دیگری در این زمینه می شناسید؟
با برنامه debmake میتونید یه کد منبع رو به کد منبع دبیانی تغییر بدید تا بشه با اون یه بسته deb ساخت. فکر کنم این هم از debhelper استفاده میکنه.
۳- در فولدر دبیان ، فایلی بنام control است. در داخل این فایل قسمتی است بنام Depends ، کدامیک از موارد زیر را می خواهیم به این Depends معرفی کنیم:
منظور Requirements قید شده در فایل README.md :
مثلا :
## Requirements
- GTK `>=3.20`
- `gnome-themes-extra` (or `gnome-themes-standard`)
- Murrine engine — The package name depends on the distro.
- `gtk-engine-murrine` on Arch Linux
- `gtk-murrine-engine` on Fedora
- `gtk2-engine-murrine` on openSUSE
- `gtk2-engines-murrine` on Debian, Ubuntu, etc.
- `sassc` — build dependency
در مورد GTK `>=3.20 چیزی نمیدونم. احتمالا اسم چندین کتابخانه مختلف رو باید نوشت. ولی از اونجایی که این یه تم هست، مطمئن نیستم اینکار باید انجام بشه یا نه.
برای gnome-themes-extra کافیه همین رو توی فایل control نوشت چون چنین بستهای توی مخازن دبیان هست.
برای murrine engine، طبق چیزی که اونجا گفته، لازمه gtk2-engines-murrine توی فایل control به عنوان یکی دیگه از وابستگیها نوشته بشه.
علاوه بر بستههای معمولی deb، بستههای کد منبع هم وجود دارند. اینها در واقعیت کد منبع برنامه هستند که برای کار توی دبیان و ایجاد deb از اونها، تغییر پیدا کردند.
برای اینکه بتونید از این بستهها، بسته deb ایجاد کنید، معمولا به یه سری ابزار نیاز دارید. این ابزارها به عنوان build dependency مشخص میشن.
اگه میخواهید یه بسته اصولی از orchis بسازید، لازمه sassc رو به عنوان build dependency اون مشخص کنید.
ولی از اونجایی که قرار نیست این بسته رو منتشر کنید، اینکار لازم نیست. اگه هم انجام بدید اتفاقی نمیافته.
شاید لازم باشه کمترین نسخه بستهها که orchis به اونها وابسته هست رو هم مشخص کنید تا APT درست کار کنه. مطمئن نیستم.
-
بر طبق این دستورالعمل :
https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging (https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging)
می خواهم بروم جلو:
Step 1: Rename the upstream tarball
دوباره به سایت:
https://github.com/vinceliuice/Orchis-theme (https://github.com/vinceliuice/Orchis-theme)
مراجعه می کنم و اینبار بجای zip ، فایل tar.gz. را دانلود می کنم(عکس 1) ، در مثالی که در سایت دبیان آورده فایل hithere_1.0.orig.tar.gz
دارای واژه orig.tar.gz است ولی مال من tar.gz. می باشد.این orig چیست؟
سایت دبیان می گوید:
Note that there is an underscore (_), not a dash (-), in the name. This is important.
و اینکار را می کند:
$ mv hithere-1.0.tar.gz hithere_1.0.orig.tar.gz
من هم می خواهم از همین دستور استفاده کنم.( عکس 2)
سوال: چون در اسم فایل ، شماره ورژن ننوشته ،آیا برای استفاده در سیستم خودم همین طور الکی می توانم ورژنی بدهم؟( مثلا من در اینجا همین طوری ورژن 1.0 را دادم.)
Step 2: Unpack the upstream tarball
در سایت دبیان از این دستور برای Unpack کردن استفاده کرده است:
$ tar xf hithere_1.0.orig.tar.gz
من هم از همین دستور می خواهم استفاده کنم.( عکس 3)
The source will unpack into a directory of the same name, and upstream version with a hyphen in between (not an underscore), so the upstream tarball should unpack into a directory called "hithere-1.0".
In this case, the tarball already unpacks into the correct subdirectory, so no changes are required.
ولی همانطور که می بینید تا جایی که من متوجه می شوم با این دستور در مثال سایت دبیان فایل hithere_1.0.orig.tar.gz به hithere-1.0 تبدیل می شود
ولی چرا در مال من فایل orchis_1.0.tar.gz تبدیل می شود به Orchis-theme-2022-05-29 نه به orchis-1.0 ، چیزی به ذهنم نمی رسد!
-
دوباره به سایت:
https://github.com/vinceliuice/Orchis-theme (https://github.com/vinceliuice/Orchis-theme)
مراجعه می کنم و اینبار بجای zip ، فایل tar.gz. را دانلود می کنم(عکس 1) ، در مثالی که در سایت دبیان آورده فایل hithere_1.0.orig.tar.gz
دارای واژه orig.tar.gz است ولی مال من tar.gz. می باشد.این orig چیست؟
اول از همه، منظورم از کد منبع، فایلهایی هست که توسعهدهنده منتشر کرده.
منظورم از تغییر کد منبع اینه: اضافه کردن فایل به فایلهای اصلی برنامه، تغییر بعضی قسمتها، حذف بعضی چیزها و کلا هر کار که بعد از اون، چیزی که پیش ما هست، با چیزی که توسعه دهنده منتشر کرده تفاوت داشته باشه. اینکه فقط access time و create time عوض بشن، تغییر حساب نمیشه.
عوض کردن دسترسی و attribute فایلها، تغییر حساب میشه.
اون orig توی اسم نشون میده که این چیزی هست که توسط توسعهدهنده منتشر شده.
از اونجایی که قراره یه سری تغییرات روی کد منبع اعمال بشه، این تغییر اسم رو انجام میدن تا مشخص باشه که کد منبع، یه تفاوتی داره با چیزی که فایلهای deb از اون ساخته شدند.
سوال: چون در اسم فایل ، شماره ورژن ننوشته ،آیا برای استفاده در سیستم خودم همین طور الکی می توانم ورژنی بدهم؟( مثلا من در اینجا همین طوری ورژن 1.0 را دادم.)
شاید با اینکار به مشکل بخورید. مطمئن نیستم.
در سایت دبیان از این دستور برای Unpack کردن استفاده کرده است:
$ tar xf hithere_1.0.orig.tar.gz
من هم از همین دستور می خواهم استفاده کنم.( عکس 3)
The source will unpack into a directory of the same name, and upstream version with a hyphen in between (not an underscore), so the upstream tarball should unpack into a directory called "hithere-1.0".
In this case, the tarball already unpacks into the correct subdirectory, so no changes are required.
ولی همانطور که می بینید تا جایی که من متوجه می شوم با این دستور در مثال سایت دبیان فایل hithere_1.0.orig.tar.gz به hithere-1.0 تبدیل می شود
ولی چرا در مال من فایل orchis_1.0.tar.gz تبدیل می شود به Orchis-theme-2022-05-29 نه به orchis-1.0 ، چیزی به ذهنم نمی رسد!
فکر کنم به این دلیل این اتفاق افتاده که موقع ایجاد اون فایل فشرده tar، اسم دایرکتوری، Orchis-theme-2022-05-29 بوده.
به طور دستی اسم دایرکتوری رو تغییر بدید به orchis-1.0 و ببینید میشه پیش رفت یا نه. هرچند فکر کنم این روش به نتیجه نرسه.
یه راه دیگه اینه که خودتون از دایرکتوری استخراج شده، فایل فشرده tar با اسم مناسب بسازید و عملیات استخراج و ساخت بسته deb رو دوباره با این فایل جدید شروع کنید.
برای اینکار اول برید داخل دایرکتوری که استخراج شده. بعد این رو بزنید:
tar -czf /path/to/output.tar.gz --transform='s|^\.|orchis-1.0|' .
به جای path/to/output.tar.gz/ مسیر به جایی که میخواهید فایل فشرده tar ذخیره بشه رو قرار بدید.
دقت کنید یه نقطه آخر دستور هست. اون رو هم باید بذارید. اون رو به /. تغییر ندید.
بعد بررسی کنید این تغییر جواب میده یا نه.
نمیدونم این کاری که گفتم چقدر با استانداردهای دبیان هماهنگ هست. ولی ممکنه کار بده.
شاید خود دستور tar قابلیتی داشته باشه که با اون اسم چیزهایی که داخل فایلفشرده هست رو تغییر داد. مطمئن نیستم.
-
با تشکر مجدد از آقای Dragon- عزیز.
-
در پوشه source ، پوشه ای بنام release وجود دارد، که حاوی فایل هایی است.( عکس 1)
مسیر پوشه release بدین قرار است:
/home/a/Desktop/orchis-1/release/
در این پوشه release فایلی بنام make-release.sh هم وجود دارد(عکس 2 ) ، که با اجرای آن فایل های tar.xz موجود در پوشه release ، در همان پوشه اکسترکت شده و سپس همگی پوشه های اکسترکت شده در پایان دوباره حذف شده و در واقع محتویات پوشه release به حالت اولیه برمی گردد.
چه دستوری می توانم بکار ببرم تا پوشه های اکسترکت شده ناشی از اجرای
فایل make-release.sh بجای پوشه release در مسیر دیگری اکسترکت شوند( و در همانجا هم باقی بمانند و حذف نشوند.)
ولی ابتدا بایستی پوشه های زیر ایجاد گردد ( هیچیک از این پوشه ها وجود ندارند و بایستی ساخته شوند)، یعنی:
/usr/share/themes/
مسیر پوشه های usr/share/themes در زیر مجموعه مسیر home/a/Desktop/orchis-1/ قرار خواهند گرفت.
یعنی مسیر این می شود:
home/a/Desktop/orchis-1/release/usr/share/themes/
و در واقع در پایان، پوشه های اکسترکت شده در داخل پوشه themes قرار بگیرند و در همانجا باقی بمانند و حذف نشوند.
-
البته تا حد توانایی خودم توانستم ، از روش دوم( یعنی 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 (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)
اگر در رابطه با ارتقا روش بالایی که بیشتر بصورت تجربی بدست آوردم ، مطالبی داشتید، بفرمایید، ممنون می شوم.
البته خودم هم سعی میکنم که روش بالایی را تا حد ممکن بهینه کنم.
-
ادامه عکسها:
-
و حالا یک قسمت دیگری میماند که در ارسالی بالاترم خواستم این موضوع را دوستان راهنمایی بکنند و تا دوستان بخواهند راهنمایی بکنند ، مجبورم تا از یک تقلب دیگری استفاده کنم تا این پروژه ، روی زمین نماند . موضوعی که با آن دست به گریبان هستم این است که در فایل deb. ای که از روش قبلی بدست آوردم ، پوشه ای بنام themes وجود دارد که در داخلش theme های برنامه هستند ، ولی چهجوری در اینجا این عمل را انجام بدهم خودش مساله است، چون چیزی به ذهنم فعلاً نمیرسد ، میروم از پوشه usr/ و محتویات آن از فایل deb. قبلی یک کپی برمیدارم و میاورم و میگذارم در مسیر پوشه اکسترکت شده ام.
البته خودم هم سعی میکنم که روش بالایی را تا حد ممکن بهینه کنم.
در ارسالی قبلی ، چون چیزی به ذهنم نمی رسید مجبور شدم که پوشه themes را از روش اول که از sudo checkinstall بدست آورده بودم و بیاورم و در روش دوم ( debuild ) استفاده نمایم.
خوشبختانه این مشکل را توانستم با کمی ویرایش همان فایل rules حل نمایم و دیگر نیازی به چنین عملی نیست.
این مطلب و کمی مطالب دیگری را در اینجا توضیح میدهم که بدون دانستن اینها امکان ویرایش فایل rules توسط کاربرانی مانند خودم که از برنامه نویسی سررشته ندارند، امکانپذیر نخواهد بود.
نکته:
در فایل rules اگر در ابتدای مسیری اسلش / بکار رفته باشد بمعنای اشاره به مسیری در سیستم عامل مان میباشد و به پوشه سورس ربطی ندارد.
مثلاً usr/share/themes/ اشاره دارد به پوشه themes در داخل ریشه سیستم عاملمان قرار دارد.
در فایل rules اگر در ابتدای مسیری اسلش / بکار نرفته باشد بمعنای اشاره به مسیری در پوشه سورسمان است و به مسیری در سیستم عاملمان اشاره ندارد.
مثلاً usr/share/themes اشاره دارد به مسیر پوشه themes در داخل پوشه سورس مان.
یعنی در داخل پوشه سورس مان پوشه ای بنام usr وجود دارد که در داخل آن پوشه ای بنام share وجود دارد و در داخل آن پوشه ای بنام themes وجود دارد.
یا مثلاً debian/usr ، چون در ابتدای مسیر علامت اسلش بکار نرفته است اشاره دارد به پوشه ای بنام usr در داخل پوشه ای بنام debian در داخل پوشه سورس مان.
بنابراین بود یا نبود علامت اسلش در ابتدای مسیر در کدهای نوشته شده در داخل فایل rules خیلی مهم است. که اگر بود مسیر به پوشه یا فایلی در سیستم عامل اصلی امان اشاره میکند و اگر نبود به فایل یا پوشه در داخل پوشه سورس.
نکته:
در دستور cp -r ، آپشن r- یا R- ، تمامی محتویات دایرکتوری موردنظر را به مسیر موردنظر کپی میکند و بدون این آپشن r- امکان کپی دایرکتوری وجود ندارد.
به عبارت دیگر برای کپی کردن یک دایرکتوری با تمام زیر شاخه هایش از گزینه r- یا R- استفاده می شود.
نکته:
برای حذف یک پوشه با تمامی زیر شاخه هایش از دستور rm -r بکار ببرید.
این فایل 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
البته اینبار چنان این فایل را برای استفاده در تم orchis ویرایش خواهیم کرد که با فایل deb ای که ایجاد میشود نه تنها باعث نصب این نرمافزار توسط پکیج منیجر سیستممان بشود بلکه فایلهای themes مربوط به این برنامه هم در داخل فایل deb قرار بگیرد.
تغییراتی که برای این ایجاد این نتایج در فایل rules بدهیم بدین قرار است:
تغییر سطر:
THEMES_DIR=debian/murrine-themes/
به:
THEMES_DIR=debian/orchis/
متغیر دیگری را هم ایجاد می کنیم:
abc=Orchis
کد:
mkdir usr
ایجاد پوشه usr در داخل پوشه سورس ( همانطور که میبینید در اولش اسلش نگذاشته ایم ، بنابراین در داخل پوشه سورس ایجاد می شود.)
کد:
mkdir usr/share
ایجاد پوشه share در داخل پوشه usr .
کد:
mkdir usr/share/themes
ایجاد پوشه themes در داخل پوشه share .
کد:
./install.sh
نصب برنامه در سیستممان ، بدون آنکه پکیج منیجر سیستممان این برنامه را بشناسد ، فایلهایی که با نصب شدن این برنامه بوجود میآیند لازم خواهیم داشت. پوشه ها و فایلهای ناشی از نصب این برنامه در مسیر usr/share/themes/ قرار می گیرند. اگر دستور debuild را بدون sudo اجرا بکنیم بجای این مسیر در مسیر پوشه کاربر فعلی ایجاد خواهد شد، در پوشه ای بنام themes. .
(با خواندن فایل readme متوجه خواهید شد که بایستی از کدام دستور یا دستورات برای نصب برنامه استفاده کنید.)
کد:
cp -r /usr/share/themes/$(abc)* usr/share/themes
در اینجا بایستی از خلاقیتمان استفاده کنیم. با اجرای دستور install.sh/. ، تعدادی پوشه در
مسیر usr/share/themes/ ایجاد شده است. با استفاده از این دستور آن پوشه ها را با محتویاتشان به داخل usr/share/themes در داخل پوشه سورس مان کپی می کنیم. چون در ابتدای همگی پوشه های تازه ایجاد شده واژه Orchis بکار رفته است و در بالا این واژه را بعنوان متغییر تعریف کردهایم از عبارت *(abc)$
استفاده می نماییم. نکته بسیار مهم توجه به بزرگی و کوچکی حروف است. Orchis است نه orchis
که اگر به این نکته توجه نکنیم در هنگام اجرای دستور debuild ، به ما میگوید که چنین پوشه یا فایلی وجود ندارد.
شاید شما بخواهید بجای برنامه orchis یک برنامه دیگری نصب کنید ، در این حالت ببینید که فایلهای نصبی آن برنامه بر روی سیستم عاملتان در کجاها نصب شده ، شاید مثلاً در usr/bin/ نصب شده باشد ، آنوقت این دستور را بایستی ویرایش نمایید، چه برای مبدأ و چه مقصد .
کد:
rm -r /usr/share/themes/$(abc)*
جون theme های مربوطه با دستور nstall.sh/. در سیستممان ایجاد شده و نه توسط پکیج منیجر سیستممان ، بعد از کپی برداری از آنها توسط دستور قبلی ، آنها را از سیستممان حذف می کنیم.
اگر با این دستور آنها را حذف نکنیم ، آنها در سیستممان باقی خواهند ماند ، چون توسط پکیج منیجرمان نصب نشدهاند که بعداً بخواهیم با نصب فایل deb از طریق پکیج منیجر سیستممان ، از طریق پکیج منیجر سیستممان آنها را حذف کنیم. آنها همینطوری باقی خواهند ماند مگر اینکه بخواهیم آنها را بصورت دستی حذف کنیم.
کد:
cp -r usr/share/themes $(THEMES_DIR)
کپی کردن محتویات usr/share/themes به /debian/orchis ، که همگی اینها در داخل پوشه سورسمان قرار دارند.
بطور کلی rules با ویرایشی که انجام دادیم اینگونه می شود:
#!/usr/bin/make -f
THEMES_DIR=debian/orchis/
abc=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
mkdir usr
mkdir usr/share
mkdir usr/share/themes
./install.sh
cp -r /usr/share/themes/$(abc)* usr/share/themes
rm -r /usr/share/themes/$(abc)*
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
در اینجا ویرایش فایل rules امان تمام می شود. بقیه مراحل طبق ارسالی قبلی است با این تفاوت که دیگر نیازی به قرار دادن پوشه theme ها بصورت دستی در داخل پوشه سورس مان نیست.
فایل deb ایجاد شده بخوبی نصب و اجرا و حذف می شود.
چون من برنامه نویس نیستم ، یک سؤالی در ذهنم باقیمانده است و اینکه:
آیا کارهایی که کلاً من در اینجا برای ایجاد فایل deb انجام دادهام از دیدگاه برنامه نویسان یک کار کثیف است یا نه؟
-
-Dragon part II : norouzi90
اکران در سراسر انجمن !
دمت گرم پسر ، تحسینت میکنم ، خسته نباشی ، روحیه کنجکاو و شخصیت پر تلاشی داری واقعا : )
-
-Dragon part II : norouzi90
اکران در سراسر انجمن !
دمت گرم پسر ، تحسینت میکنم ، خسته نباشی ، روحیه کنجکاو و شخصیت پر تلاشی داری واقعا : )
تشکر آقای سودو ، لطف دارید.
-
در پوشه source ، پوشه ای بنام release وجود دارد، که حاوی فایل هایی است.( عکس 1)
مسیر پوشه release بدین قرار است:
/home/a/Desktop/orchis-1/release/
در این پوشه release فایلی بنام make-release.sh هم وجود دارد(عکس 2 ) ، که با اجرای آن فایل های tar.xz موجود در پوشه release ، در همان پوشه اکسترکت شده و سپس همگی پوشه های اکسترکت شده در پایان دوباره حذف شده و در واقع محتویات پوشه release به حالت اولیه برمی گردد.
...
داخل اون دایرکتوری چندین فایل release از تم با رنگهای مختلف هست. یه نفر میتونه مستقیم این فایلها رو به میزکار بده تا میزکار اون رو نصب کنه. اینجوری نیازی به اجرا اسکریپت install.sh هم نیست.
اون اسکریپت make-release.sh برای کاری که میخواهید انجام بدید مناسب نیست. نحوه کار اون رو هم درست متوجه نشدید.
اون اسکریپت فایل release میسازه. میتونید تمام فایلهای فشردهای که توی اون دایرکتوری هست رو پاک و اون اسکریپت رو اجرا کنید و ببینید که یه سری tarball اونجا ایجاد میشن.
برخلاف چیزی که گفتید، فایلهای فشرده اونجا استخراج نمیشن. بلکه اون اسکریپت اول اون فایلهای فشردهای که اونجا هست رو پاک میکنه، بعد اسکریپت install.sh رو با آرگومانهای مناسب اجرا میکنه تا نسخه مورد نظر تم اونجا کپی بشه و در نهایت از اون نسخه تم، یه tarball میسازه.
برای کاری که میخواهید انجام بدید، باید از اسکریپت install.sh استفاده کنید. make-release.sh مناسب نیست.
میشه اسکریپت make-install.sh رو تغییر داد ولی به اینکار نیازی نیست و همون اسکریپت install.sh مناسب هست.
فایل 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.
برای Homepage میتونید https://github.com/vinceliuice/Orchis-theme رو مشخص کنید.
برای Architecture هم میشه all رو مشخص کرد.
موقع ساخت بستههای deb، اگه معماری رو all مشخص کنید، به این معنی هست که اون بسته میتونه روی همه معماریها کار کنه و لازم نیست جدا جدا برای هر معماری ساخته بشه.
معمولا بستههایی که فقط شامل فایلهای معمولی غیر اجرایی هستند، اینجوریند. بستههایی که شامل برنامهای هستند که به یه زبان تفسیری (مثل پایتون یا perl) نوشته شده هم معمولا اینجوری هستند.
برای مثال بسته apt-file شامل یه سری فایل متنی به همراه خود برنامه apt-file هست. چون خود برنامه با perl نوشته شده، میشه اون رو هر جایی که perl هست اجرا کرد و به معماری بستگی نداره.
خود perl به معماری وابسته هست ولی apt-file کاری به معماری نداره. هرجا perl باشه کار میده.
بسته gnome-backgrounds و plasma-workspace-wallpapers هم اینجوری هستند چون فقط یه سری عکس jpg و چنتا فایل متنی همراهشون هست.
اگه معماری any مشخص بشه، به این معنی هست که این بسته میتونه روی همه معماریها کار کنه ولی باید برای هر معماری به صورت جدا ساخته بشه.
از اونجایی که این بسته فقط شامل تم هست و اون تم خودش به یه معماری خاص وابسته نیست، میشه Architecture رو برابر all قرار داد.
-
این فایل 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
البته اینبار چنان این فایل را برای استفاده در تم orchis ویرایش خواهیم کرد که با فایل deb ای که ایجاد میشود نه تنها باعث نصب این نرمافزار توسط پکیج منیجر سیستممان بشود بلکه فایلهای themes مربوط به این برنامه هم در داخل فایل deb قرار بگیرد.
تغییراتی که برای این ایجاد این نتایج در فایل rules بدهیم بدین قرار است:
...
کد:
mkdir usr
ایجاد پوشه usr در داخل پوشه سورس ( همانطور که میبینید در اولش اسلش نگذاشته ایم ، بنابراین در داخل پوشه سورس ایجاد می شود.)
کد:
mkdir usr/share
ایجاد پوشه share در داخل پوشه usr .
کد:
mkdir usr/share/themes
ایجاد پوشه themes در داخل پوشه share .
یا گزینه راحتتر:
mkdir -p usr/share/themes
هرچند با توجه به راه بهتری که وجود داره، این دستور لازم نیست.
کد:
cp -r /usr/share/themes/$(abc)* usr/share/themes
در اینجا بایستی از خلاقیتمان استفاده کنیم. با اجرای دستور install.sh/. ، تعدادی پوشه در
مسیر usr/share/themes/ ایجاد شده است. با استفاده از این دستور آن پوشه ها را با محتویاتشان به داخل usr/share/themes در داخل پوشه سورس مان کپی می کنیم. چون در ابتدای همگی پوشه های تازه ایجاد شده واژه Orchis بکار رفته است و در بالا این واژه را بعنوان متغییر تعریف کردهایم از عبارت *(abc)$
استفاده می نماییم.
...
چرا این قدر کار رو سخت میکنید؟ خود اسکریپت install.sh یه آپشن داره که مشخص کنید فایلهای تم رو کجا قرار بده.
./install.sh -d usr/share/themes
اون فایل rules هم مشکلات متعددی داره.
چون من برنامه نویس نیستم ، یک سؤالی در ذهنم باقیمانده است و اینکه:
آیا کارهایی که کلاً من در اینجا برای ایجاد فایل deb انجام دادهام از دیدگاه برنامه نویسان یک کار کثیف است یا نه؟
بله. خیلی. نباید همینجوری هر برنامهای رو که پیدا میکنید روی سیستمعامل اصلی نصب کنید. میتونه اون رو خراب کنه.
به غیر از این، خود اسکریپت install.sh قابلیتهای مورد نیاز رو داشته و نیازی به راه حلهای عجیب نبوده.
-
چرا این قدر کار رو سخت میکنید؟ خود اسکریپت install.sh یه آپشن داره که مشخص کنید فایلهای تم رو کجا قرار بده.
./install.sh -d usr/share/themes
با روشی که فرمودید رفتم جلو ، ولی متأسفانه جواب نداد.
اگر بخواهیم این کدی را که فرمودید در داخل فایل rules بکار ببریم ، تعدادی از کدهایی که من در ارسالی قبلیام برای فایل rules نوشتهام را دیگر لازم نخواهیم داشت و بایستی حذف بشوند، آنهایی که بایستی حذف بشوند عبارتند از:
abc=Orchis
./install.sh
cp -r /usr/share/themes/$(abc)* usr/share/themes
rm -r /usr/share/themes/$(abc)*
و بعد بجای اینها کد شما را قرار می دهیم. در این حالت فایل rules میشود عکس 1 .
ولی با نصب فایل deb ایجاد شده، هیچ چیزی به لیست تم های سیستم اضافه نمیشود و فقط پوشه ای بنام orchis به usr/share/themes/ اضافه میشود که فاقد کار آرایی می باشد.( عکسهای 2 و 3 )
نمیدانم شاید مشکل از من است یا روشتان بایستی اصلاح شود.
-
آقای Dragon- خیلی زحمت ما را میکشند ، نخواستم بیش از این اذیتشان بکنم ، امشب را هم مثل خیلی از شبهای دیگه که روی این مساله کار کرده بودم ، نخوابیدم تا این مساله را حل بکنم.
الان با این شب زنده داری ها تازه می فهم که برنامه نویسان محترم چه می کشند. به خاطر یک نقطه یا ویرگول اضافی یا کم ، بندگان خدا همیشه روی اعصابند .
روشی که من در ارسال بالاترم داشتم بدین نحو بود که فایل install.sh روی سیستمم اجرا میشد و من نگاه میکردم تا ببینم که این برنامه در سیستمم کجاها فایل هایش را ریخته ،می رفتم از جایی که فایل هایش ریخته از همگی آنها یک کپی بر می داشتم و می گذاشتم توی یک پوشه ای در داخل پوشه سورس. بعد هم از پوشه سورس یک کپی می گذاشتم توی پوشه debian .
خیلی دوست داشتم برای فرمان install.sh یک آپشنی را پیدا کنم تا دیگه در داخل سیستمم دنبال فایلهای برنامه نگردم . البته آقای Dragon- بعد از چند روز کلید حل این معما را دادند دستم ، (البته یک دندونک این کلید افتاده بود که بایستی یک جوری پیداش می کردم)
( آپشن d- برای مشخص کردن دایرکتوری مقصد در اینجا بکار می رود. برای اطلاعات بیشتر عکس 1 را ببینید.)
بیایید تا ببینیم، ایراد کار کجا بود.
برای امتحان در داخل همین پوشه سورس یک ترمینالی باز می کنیم و ابتدا با دستور :
mkdir -p usr/share/themes
چند تا پوشه ی تو در تو می سازیم. بعد هم دستور:
./install.sh -d usr/share/themes
را بکار میبریم، همانطور که میبینید با اجرای install.sh پوشه های زیر در صفحه ترمینال نشان داده می شود که ایجاد می شوند:
Orchis Orchis-Compact Orchis-Dark Orchis-Dark-Compact Orchis-Light Orchis-Light-Compact
ولی بعلت ناشناختهای تنها پوشه Orchis در داخل پوشه themes قرار میگیرد و مابقی پوشه ها معلوم نمیشود چه میشوند !! ( عکس 2 )
بعد از کلی گشتن آخر سر فهمیدم که نبایستی مسیری که میخواهیم بدهیم بصورت:
usr/share/themes
نوشته شود ،بلکه مسیر مربوطه بایستی به این صورت نوشته شود:
/home/a/Documents/orchis-1/usr/share/themes
و بطور کلی:( عکس 3)
./install.sh -d /home/a/Documents/orchis-1/usr/share/themes
و فایل rules.sh هم بدین صورت:
#!/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
mkdir usr
mkdir usr/share
mkdir usr/share/themes
./install.sh -d /home/a/Documents/orchis-1/usr/share/themes
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
و نتیجه نهایی: ( عکس 4 )
-
بر طبق این دستورالعمل :
https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging (https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging)
می خواهم بروم جلو:
Step 1: Rename the upstream tarball
دوباره به سایت:
https://github.com/vinceliuice/Orchis-theme (https://github.com/vinceliuice/Orchis-theme)
مراجعه می کنم و اینبار بجای zip ، فایل tar.gz. را دانلود می کنم(عکس 1) ، در مثالی که در سایت دبیان آورده فایل hithere_1.0.orig.tar.gz
دارای واژه orig.tar.gz است ولی مال من tar.gz. می باشد.این orig چیست؟
سایت دبیان می گوید:
Note that there is an underscore (_), not a dash (-), in the name. This is important.
و اینکار را می کند:
$ mv hithere-1.0.tar.gz hithere_1.0.orig.tar.gz
من هم می خواهم از همین دستور استفاده کنم.( عکس 2)
سوال: چون در اسم فایل ، شماره ورژن ننوشته ،آیا برای استفاده در سیستم خودم همین طور الکی می توانم ورژنی بدهم؟( مثلا من در اینجا همین طوری ورژن 1.0 را دادم.)
Step 2: Unpack the upstream tarball
در سایت دبیان از این دستور برای Unpack کردن استفاده کرده است:
$ tar xf hithere_1.0.orig.tar.gz
من هم از همین دستور می خواهم استفاده کنم.( عکس 3)
The source will unpack into a directory of the same name, and upstream version with a hyphen in between (not an underscore), so the upstream tarball should unpack into a directory called "hithere-1.0".
In this case, the tarball already unpacks into the correct subdirectory, so no changes are required.
ولی همانطور که می بینید تا جایی که من متوجه می شوم با این دستور در مثال سایت دبیان فایل hithere_1.0.orig.tar.gz به hithere-1.0 تبدیل می شود
ولی چرا در مال من فایل orchis_1.0.tar.gz تبدیل می شود به Orchis-theme-2022-05-29 نه به orchis-1.0 ، چیزی به ذهنم نمی رسد!
پاسخ به سوال ارسالی قبلی ام و همچنین بهینه سازی جدید برای مطالب قبلی ام:
اگر توسعهدهنده نرم افزاری ، فایل orig آن نرمافزار را ارایه نکرده است ، جای هیچ گونه نگرانی نیست. من بلاخره امروز توانستم ، تنها با استفاده از آزمون وخطا به راه حل صحیح ایجاد فایل orig مربوط به یک فایل تاربال دست پیدا کنم.
در ضمن در اینجا راهکار صحیح تر تغییر نام فایل تاربال را برای ساخت فایل deb به شما خواهم گفت. تا بعداً دچار مشکل نشوید. هر چند که فایل deb ای که با روشهای قبلی گفتهام کار میکند و مشکلی ندارد ولی در ریز ریز مطلب ، راهکار پایینی برای تغییر نام پوشه تاربال به نام مورد نظر بهتر می باشد.
مثال همیشگی:
فایلی بنام Orchis-theme-2022-05-29.tar.gz می باشد. در اینجا دو تا مساله داریم:
الف) مساله اول این است که ارایه دهنده این نرمافزار فایل orig این نرمافزار را ارایه نکرده است.
اگر به سایت دبیان نگاه کنید با استفاده از دستور:
tar xf hithere_1.0.orig.tar.gz
https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging (https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging)
خروجی این دستور ایجاد پوشه ای بنام hithere-1.0 می باشد. ( به تفاوت دو تا حرف آندرلاین و همچنین خط فاصله در هر دو کلمه حتماً دقت فرمایید.) تا اینجا من اکثراً از دستور :
dh_make --createorig
برای فرآیند ''Debianization'' استفاده میکردم ، ماحصل این دستور ایجاد پوشه debian در پوشه
سورس و ایجاد فایل orig در پوشه بالادست بود.
ولی وقتی که از دستور tar xf برای اکسترکت کردن این فایل orig استفاده میکردم ، عوض اینکه به من خروجی، پوشه ای با محتویات مربوطه بدهد، محتویات فایل orig را در همان پوشه extract می کرد.( عکس 1)
این فایل orig ساخته شده توسط این روش می لنگید هرچند که فایل deb ایجاد شدهام ، مشکلی از لحاظ کارکرد نداشت. ولی بهرحال دوست داشتم این فایل orig هم صحیحتر بشود و با فرمان
tar xf خروجی معقول تری به من بدهد.
ب) مساله دوم برایم این است که در برخی از موارد بایستی برای ساخت فایل deb ، نام فایل تاربال بایستی تغییر نام داده شود.
شاید این تغییر نام مثلاً به این علت باشد که در نام فایل تاربال حروف بزرگ بکار رفته باشد که در حین استفاده از dh_make دچار خطا خواهد شد. فایل Orchis-theme-2022-05-29.tar.gz را میخواهیم برای ساخت فایل deb استفاده نماییم ،چون حرف بزرگ در نام این فایل بکار رفته است برای اینکار بایستی فکری بکنیم.
سالم ترین روشی که تا به این لحظه برای حل مسایل اینچنینی پیدا کرده ام بدین صورت است:
۱- ابتدا فایل تاربال را extract می کنیم.
۲- پوشه ای جدید و خالی با همان نامی که فایل deb امان را میخواهیم نامگذاری شود،ایجاد می نماییم.
۳-محتویات پوشه extract شده را درون پوشه جدید ، کپی می نماییم.
۴- فایل تاربال و پوشه extract شده از آن را حذف می نماییم و یا بجای دیگری منتقل می نماییم ، چون با اینها دیگر کاری نخواهیم داشت.
۵- پوشه جدیدمان را ، بصورت فایل تاربال در میآوریم.( ترجیحاً بصورت tar.gz )
پس تا اینجا ما یک پوشه داریم و یک فایل تاربال ایجاد شده از آن.
۶-می رویم به درون پوشه سورس و این دستور را اجرا می کنیم:( عکس 2 )
dh_make -f ../name_of_TarballFile
مثلاً مال من می شود:
dh_make -f ../orchis-1.tar.gz
ماحصل این دستور بازهم دو تا است:
الف) ایجاد پوشه debian با محتویاتش در درون پوشه سورس.
ب) ایجاد فایل orig ، در پوشه بالایی.( عکس 3 )
برای اطمینان که این فایل orig ، به شکلی که سایت دبیان گفته:
Step 2: Unpack the upstream tarball
The source will unpack into a directory of the same name, and upstream version with a hyphen in between (not an underscore), so the upstream tarball should unpack into a directory called "hithere-1.0".
In this case, the tarball already unpacks into the correct subdirectory, so no changes are required.
https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging (https://wiki.debian.org/Packaging/Intro?action=show&redirect=IntroDebianPackaging)
در میآید یا نه ، این دستور را امتحان میکنیم :
tar xf orchis_1.orig.tar.gz
در نام فایل تاربال orig ، از حرف آندرلاین استفاده شده است و بعد از استفاده از فرمان tar xf
همانطور که در عکس 4 ، میبینید ، بصورت اتوماتیک پوشه ای با نام orchis-1 ایجاد شده است.
که در این اسم بصورت اتوماتیک بجای حرف آندرلاین از حرف خط فاصله استفاده شده است ، دقیقاً همانی را که سایت دبیان گفته است ، محقق شده است.
بنظر بنده حقیر از ابتدای کار که فایل تاربال میآید بدستمان تا فرآیند ''Debianization''
مواردی که در این ارسالی گفتم ، میشود گفت آسانترین و بدون دردسرترین روشی است که یک فرد میتواند برای ساخت فایل deb در پیش بگیرد.( البته از روش debuild )
البته موارد مربوط به بعد از ''Debianization'' ، مواردی دیگر را میطلبد که نمیشود برای آن یک اصول مشخص را گفت ، فرد باید توانایی ویرایش فایل های rules و control و.... را داشته باشد.
هر چند که در ارسالی های قبلیام تا حدی به این موارد پرداخته ام .
ولی بهر حال به یاد داشته باشید اگر زمانی خواستید از طریق debuild ، فایل deb بسازید، نیازمند این سه تا هستید:
۱- فایل تاربال ( با نام مناسب)
۲- پوشه اکسترکت شده فایل تاربال ( با نام مناسب)
۳- فایل orig ( تولید شده از راه صحیحش)
که در اینجا به حد کفایت آنها را خدمتتان گفتم.
-
ولی بعلت ناشناختهای تنها پوشه Orchis در داخل پوشه themes قرار میگیرد و مابقی پوشه ها معلوم نمیشود چه میشوند !! ( عکس 2 )
مشکل از اون اسکریپت هست که وقتی مسیر رو به صورت نسبی بهش میدن درست کار نمیکنه.
و فایل rules.sh هم بدین صورت:
#!/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
mkdir usr
mkdir usr/share
mkdir usr/share/themes
./install.sh -d /home/a/Documents/orchis-1/usr/share/themes
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 بسازید، به مشکل میخورید.
گزینه بهتر این هست که این خط رو تغییر بدید:
./install.sh -d /home/a/Documents/orchis-1/usr/share/themes
به این:
./install.sh -d $(CURDIR)/usr/share/themes
متغیر CURDIR توی make، به دایرکتوری فعلی که داخلش هستید اشاره میکنه. اینجوری اگه همه چیزها رو منتقل کنید به یه مسیر دیگه، باز هم میتونید بسته deb رو بسازید.
این خطها رو هم میتونید پاک کنید. خود اسکریپت install.sh، دایرکتوریهای مورد نیاز رو میسازه.
mkdir usr
mkdir udr/share
mkdir usr/share/themes
میشه اون فایل rules رو بهینهتر هم کرد.
نحوه کار فایل rules الان اینجوریه که با استفاده از اسکریپت install.sh، فایلهای تم رو توی یه دایرکتوری، توی جایی که دارید ساختن رو انجام میدید، نصب میکنه و بعد اون فایلهای بدست اومده رو کپی میکنه توی دایرکتوری debian/orchis تا بعدا داخل بسته deb قرار بگیره.
میتونید از همون اول به اسکریپت install.sh بگید که تم رو توی دایرکتوری درست نصب کنه تا نیازی به کپی مجدد هم نباشه.
برای اینکار، میتونید اسکریپت instsll.sh رو به این شکل استفاده کنید:
./install.sh -d $(CURDIR)/$(THEMES_DIR)/usr/share/themes
این خطها رو هم پاک کنید چون نیازی به اونها نمیشه:
cp -r usr/share/themes $(THEMS_DIR)
cp -r usr $(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
./install.sh -d $(CURDIR)/$(THEMES_DIR)/usr/share/themes
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
احتمالا باز هم میشه این فایل rules رو بهبود داد ولی نمیدونم چجوری.
-
آقای Dragon- ، فایل rules ای که با متغیر CURDIR ، نوشتید ، خیلی بهتر شد.
ولی اشکال بسیار جزیی داشت که در عکس 1 ، نشان داده ام. برای حل آن، بنظرم بهتر است که در تعریف متغیر ، اسلس آخر را حذف نماییم و متغییر را اینجوری تعریف بنماییم:( در این حالت دیگه دو تا اسلش پشت سرهم نمیشه)
THEMES_DIR=debian/orchis
احتمالا باز هم میشه این فایل rules رو بهبود داد ولی نمیدونم چجوری.
با کمکهایی که شما تا حالا کردهاید ، اینکه کاری نداره.
با استفاده از آپشن d- و همچنین متغییر CURDIR که معرفی فرمودید ،دیگه نیازی به تقلب از
بسته murrine-themes نمی باشد . در این حالت فایل rules اینطوری می شود:
#!/usr/bin/make -f
THEMES_DIR=debian/orchis
%:
dh $@
override_dh_auto_install:
./install.sh -d $(CURDIR)/$(THEMES_DIR)/usr/share/themes
و نکته مهمتر اینکه با استفاده از این فایل rules ، دیگر debuild نیازی به استفاده کردن از sudo ندارد.
-
با وجودیکه فایل deb ایجاد شده کار میکند ، ولی میخواهم تا دستی سر و روی error و warning های قبل از اعلام Finished running lintian بکشم.(عکس 1)
در مورد حل قضیه mail به این صفحه رسیدم:
https://www.debian.org/doc/manuals/debmake-doc/ch03.en.html (https://www.debian.org/doc/manuals/debmake-doc/ch03.en.html)
ولی چرا در هوم کاربرهایم اصلاً فایلی بنام bashrc/. ~ نمی باشد؟
مثلاً برای بدست آوردن این فایل بروم و مثلاً از لینوکس مینت بصورت لایو این فایل را کپی کنم و بگذارم در هوم کاربرم؟!( عکس 2)
-
اگر توسعهدهنده نرم افزاری ، فایل orig آن نرمافزار را ارایه نکرده است
معمولا توسعهدهندهها فایل جدایی رو به عنوان فایل orig ارایه نمیکنند. در واقعیت فایل orig همون چیزی هست که توسعه دهنده منتشر کرده و هنوز تغییراتی روی اون اعمال نشده.
بعد از اینکه فایلهای لازم برای ساخت بسته deb به کد منبع منتشر شده اضافه میشه و تغییرات لازم روی کد منبع رو هم انچام میدن، یه بسته source دبیان ایجاد میکنند.
در ضمن در اینجا راهکار صحیح تر تغییر نام فایل تاربال را برای ساخت فایل deb به شما خواهم گفت. تا بعداً دچار مشکل نشوید. هر چند که فایل deb ای که با روشهای قبلی گفتهام کار میکند و مشکلی ندارد ولی در ریز ریز مطلب ، راهکار پایینی برای تغییر نام پوشه تاربال به نام مورد نظر بهتر می باشد.
این تغییر نام در بیشتر مواقع لازم نیست. برای مورد orchis، اسم مناسب نبوده و لازم شده اسم رو عوض کنید.
ولی چرا در هوم کاربرهایم اصلاً فایلی بنام bashrc/. ~ نمی باشد؟
مثلاً برای بدست آوردن این فایل بروم و مثلاً از لینوکس مینت بصورت لایو این فایل را کپی کنم و بگذارم در هوم کاربرم؟!( عکس 2)
اسم اون فایل bashrc. هست. یه نقطه اول اسمش داره. اگه واقعا همچنین فایلی اونجا نیست، میتونید یه نسخه از اون رو توی این دایرکتوری پیدا کنید:
/etc/skel/
-
از تمامی error ها و warning ها ، تنها این یکی موند روی دستم:
W: orchis: initial-upload-closes-no-bugs
-
باید یه باگ ITP براش باز کنی که اونرو ببنده
-
بصورت دستی فایل changelog را ویرایش کردم و هشدار مربوطه دیگر نیامد.(عکس 1 )
فایل changelog قبل از ویرایش :
orchis (1-1) unstable; urgency=medium
* Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP>
-- a a <mytest@gmail.com> Thu, 04 Aug 2022 22:56:08 +0430
فایل changelog بعد از ویرایش:
orchis (1-1) unstable; urgency=medium
* Initial release closes: #123456
-- a a <mytest@gmail.com> Thu, 04 Aug 2022 12:10:37 +0430
اگر بخواهم اینکار را بصورت دستی انجام ندهم و بصورت اتوماتیک اینکار صورت بپذیرد ، چه دستوری را بایستی بکار ببرم؟
مورد بعدی این است که در بسته murrine-themes-0.98.11 که در مخازن اصلی دبیان است ، اگر به فایل copyright توجه کنیم ( عکس 2) ، سطری بدین مضمون وجود دارد:
Copyright (C) 2007-2009 by Yves-Alexis Perez <corsac@debian.org>
این copyright از کجا برای این بسته صادر شده است؟ از گروه دبیان صادر شده یا از جای دیگر؟
آیا گروه دبیان اجازه می دهند که بسته ای فاقد copyright و تنها با لایسنس gpl در مخازن رسمی قرار بگیرد؟
اگر چنین اجازه ای نمی دهند، مجوز این بسته مربوط به 2007-2009 است که خیلی وقت است که زمانش منقضی شده است ، پس چرا همچنان در مخازن اصلی این بسته قرار دارد بدون آنکه مجوزش تمدید شده باشد؟!
مثلاً اگر بالفرض مالک Orchis-theme به آدرس :
https://github.com/vinceliuice/Orchis-theme (https://github.com/vinceliuice/Orchis-theme)
از من درخواست ساخت فایل deb برای قرار دادن در کنار فایل سورس در صفحه گیتهابش نموده باشد ، اینجا من برای ساخت فایل deb به مشکل بر می خورم. من بایستی برای فایل copyright در پوشه debian مانند مثال بالا سطری را اختصاص به شروع و انقضا مدت copyright بنمایم. ولی هیچ نوشتهای مبنی بر copyright و همچنین زمان مندرج بر copyright اعم از زمان شروع و انقضا مدت آن در فایلهای موجود در گیتهاب مربوط به این بسته نمی یابم.
تنها این نوشته وجود دارد:
GPL-3.0 license
آیا در آنجا مطلبی مربوط به copyright هست ولی من نمی بینم؟
آیا زمانی که copyright مربوط به یک بسته نیست، بایستی ابتدا به copyright اقدام شود و سپس اقدام به ساخت و قرار دهی فایل deb مربوط به آن بسته در گیتهاب نمود؟
آیا زمانی که copyright مربوط به یک بسته نیست، همینطوری برای اینکه lintian خطا و یا هشدار ندهد ، الکی در رابطه با copyright یک چیزهایی بنویسیم، چون که نمیخواهیم در مخازن رسمی دبیان قرار بدهیم بلکه میخواهیم در گیتهاب قرار بدهیم ، بنابراین الکی نوشتن اشکالی ندارد؟
بطور کلی برای صدور copyright و مدت زمان صدور و انقضا آن آیا گروه دبیان این کار را میکنند ؟ یا اصلاً copyright را کی صادر می کند؟
آیا من میتوانم این فایل deb ایجاد شده توسط خودم ولی از بسته ای که متعلق به دیگری است( و با مجوزGPL-3.0 license انتشار یافته ) در صفحهای متعلق به خودم در گیتهاب بدون هیچگونه مجوزی از مالک این بسته در آنجا قرار بدهم؟
آیا فایل deb ایجاد شدهام یک fork از بسته اصلی حساب می شود؟
-
مطالب پایین نمیدانم کاملا درست هستند یا نه؟ تا همین حد فعلاً از دستم برمی آید و تا این حدود این مسایل را استنباط می کنم.
در رابطه با کپی رایت (یا حق مؤلف) یک اصطلاح حقوقی است که برای توصیف حقوقی که پدیدآورندگان بر آثار ادبی و هنری خود دارند استفاده می شود. سادهترین واژه قابل فهمی که من میتوانم برایش متصور شوم ، واژه مالکیت است.
در فایل copyright ، دو تا واژه بیشتر به چشم میخورد: Copyright و License .
مثلاً اتومبیلی را خریده ایم ، در اینجا مالک اتومبیل من هستم ، میروم به یک آژانس اینترنتی تا ثبت نام کنم، آنها مجوز کار در آژانس اینترنتی را برایم صادر میکنند. این مجوز دارای ضوابطی است که بایستی رعایت بکنم ، مثلاً بیش از سه مسافر سوار نکنم.
در اینجا مالک اتومبیل به مفهوم copyright است و آژانس اینترنتی و ضوابط آنها یعنی License .
مثال دیگر مثلاً من نرم افزاری را ساختهام ، مالک نرمافزار من هستم ولی اینکه نحوه بهره برداری از نرم افزارم را به دیگران چگونه بدهم میشود لایسنس.
با دادن حتی GPL-3.0 license به نرم افزارم که دیگران به راحتی از نرم افزارم استفاده کنند ، مالکیت من بر نرم افزارم از بین نمیرود. حتی بعداً میتوانم این مجوز را از روی نرم افزارم بردارم، چون مالک نرم افزارم هستم.
این copyright از کجا برای این بسته صادر شده است؟ از گروه دبیان صادر شده یا از جای دیگر؟
تا آنجایی که من فهمیدم برای نرمافزارها ، مخصوصاً آنهایی که با مجوز ( Licens ) هایی مانند:
GPL و LGPL و AGPL و The Clear BSD License و CeCILL version 2 و..... منتشر می شوند، نیازی نیست که طرف برود و در جایی حق کپی رایت بگیرد، همین که طرف در یک مخزن عمومی مانند گیتهاب و ... برنامه اش را در معرض دید عموم قرار می دهد، این میشود برایش کپی رایت.
البته کار به جاهای باریکتر قضایا و دعاوی حقوقی قضیه ندارم.
پس من اینطوری می فهم که برای این بسته از جایی برایش کپی رایت صادر نشده است.
از گروه دبیان هم صادر نشده است. گروه دبیان کپی رایت صادر نمیکند.
آیا گروه دبیان اجازه می دهند که بسته ای فاقد copyright و تنها با لایسنس gpl در مخازن رسمی قرار بگیرد؟
هر بسته ای وقتی که تولید میشود ، بصورت اتوماتیک وار ، کپی رایت یا همان حق مالکیت آن بسته مال تولید کننده آن بسته است، و با این اوصاف کمتر میشود بسته ای را متصور شد که صاحب نداشته باشد یعنی درواقع کپی رایت نداشته باشد، پس بصورت طبیعی هر بسته ای دارای مالکی است که کپی رایت مال اوست.
اگر چنین اجازه ای نمی دهند، مجوز این بسته مربوط به 2007-2009 است که خیلی وقت است که زمانش منقضی شده است ، پس چرا همچنان در مخازن اصلی این بسته قرار دارد بدون آنکه مجوزش تمدید شده باشد؟!
من این قضیه 2007-2009 را درست متوجه نشده بودم. من بصورت اشتباهی اینطور فکر میکردم که این جمله میگوید که مالکیت این نرمافزار از سال 2007 تا 2009 مال این آقا است.
و برای تاریخ های بعدی نرفته که مجوز کپی رایت بگیرد ، ولی اصل این قضیه اینطوری است:
The copyright notice
The copyright notice should include the year in which you finished preparing the release (so if you finished it in 1998 but didn't post it until 1999, use 1998). You should add the proper year for each past release; for example, “Copyright 1998, 1999 Terry Jones” if some releases were finished in 1998 and some were finished in 1999. If several people helped write the code, use all their names.
For software with several releases over multiple years, it's okay to use a range (“2008-2010”) instead of listing individual years (“2008, 2009, 2010”) if and only if every year in the range, inclusive, really is a “copyrightable” year that would be listed individually; and you make an explicit statement in your documentation about this usage.
Always use the English word “Copyright”; by international convention, this is used worldwide, even for material in other languages. The copyright symbol “©” can be included if you wish (and your character set supports it), but it's not necessary. There is no legal significance to using the three-character sequence “(C)”, but it does no harm.
If you have copied code from other programs covered by the same license, copy their copyright notices too. Put all the copyright notices for a file together, right near the top of the file.
https://www.gnu.org/licenses/gpl-howto.html (https://www.gnu.org/licenses/gpl-howto.html)
یعنی اینکه آین آقا در سالهای 2007 و 2008 و 2009 ، برای هر کدام از این سالها یک نسخهای جدید از این برنامه را تولید کرده و به بیرون داده است.
آیا در آنجا مطلبی مربوط به copyright هست ولی من نمی بینم؟
آیا زمانی که copyright مربوط به یک بسته نیست، بایستی ابتدا به copyright اقدام شود و سپس اقدام به ساخت و قرار دهی فایل deb مربوط به آن بسته در گیتهاب نمود؟
اصلاً قرار نیست که فرد در رابطه با کپی رایت در کنار فایلهای نرم افزارش چیزی بنویسد.همین که این فرد ، نسخهای از نرم افزارش را در گیتهاب قرار میدهد ، این برایش کپی رایت است.
آیا زمانی که copyright مربوط به یک بسته نیست، همینطوری برای اینکه lintian خطا و یا هشدار ندهد ، الکی در رابطه با copyright یک چیزهایی بنویسیم، چون که نمیخواهیم در مخازن رسمی دبیان قرار بدهیم بلکه میخواهیم در گیتهاب قرار بدهیم ، بنابراین الکی نوشتن اشکالی ندارد؟
نیازی به الکی نوشتن نیست، برویم وببینیم که برای چه سالهایی نسخه هایی از نرمافزار به بیرون داده شده است ، این میشود سالهای مربوط به کپی رایت .
مثلاً برای همین orchis-theme میشود :
Copyright (C) 2021-2022
بطور کلی برای صدور copyright و مدت زمان صدور و انقضا آن آیا گروه دبیان این کار را میکنند ؟ یا اصلاً copyright را کی صادر می کند؟
نه ، تولید یک نرمافزار و یا قرار دادن آن در یک مخزن عمومی ، عین کپی رایت است.
آیا من میتوانم این فایل deb ایجاد شده توسط خودم ولی از بسته ای که متعلق به دیگری است( و با مجوزGPL-3.0 license انتشار یافته ) در صفحهای متعلق به خودم در گیتهاب بدون هیچگونه مجوزی از مالک این بسته در آنجا قرار بدهم؟
خیر، تنها میتوانم در همان گیتهاب از آن fork کنم و اگر در جای دیگری استفاده می کنم حتما بگویم که از کجا این کدها را برداشته ام و آدرس دقیق بدهم.
آیا فایل deb ایجاد شدهام یک fork از بسته اصلی حساب می شود؟
اگر من در گیتهاب صفحهای برای خودم باز کنم و از بسته مورد نظرم یک فورک به صفحه خودم ایجاد کنم و بعد در صفحه خودم فایل deb مربوط به این بسته را قرار بدهم بنظرم یک فورک حساب میشود.
نکته : البته بنیادی بنام The Free Software Foundation (FSF) وجود دارد که برخی از توسعه دهندگان ، حق کپی رایت نرم افزارهایشان را به این بنیاد اعطا میکنند.
نکته : اگر بخواهید فایل مربوط به کپی رایت بسته هایی که بر روی سیستمتان نصب شده است را مطالعه کنید به این مسیر بروید:
usrshare/doc/
نکته: تا جایی که متوجه میشوم ، برای گروه دبیان مهمترین چیز مربوط به یک بسته ، لایسنس آن بسته است ، اینکه کپی رایت آن بسته مال چه کسی است ، احتمال دارد مال یک شخص باشد.
نکته:تا جایی که متوجه میشوم ، بنیاد FSF در مورد کپی رایت های اهدایی به بنیاد کمال دقت را دارد تا حتی به اولین تولید کنند آن نرمافزار برسد و از آنها هم مجوز اهدا کپی رایت را بگیرد.
-
کسی یا جایی کپیرایت «صادر» نمیکنه. حق رونوشت یه حقه که از ابتدا وجود داره.
-
در اینجا برای بار آخر فایل Orchis-theme-2022-05-29.tar.gz ، را بصورت مرحله به مرحله بصورت فایل deb در می آورم.
البته بدون هیچگونه error و warning.
در مورد ویرایش فایل هایی مانند control یادتان نرود که در جاهایی که لازم است از tab استفاده نمایید نه از چند تا space و یا کپی کردن فاصله.
برای مخازن رسمی اگر خواستید فایل deb بسازید ، ویرایش های بیشتری در فایل هایی مانند copyright و ... باید انجام دهید.
( اگر موردی بعدا بنظرم برای اصلاح پیش آمد نسبت به این فایل ، در همین ارسالی برمی گردم و آنرا اصلاح خواهم کرد و ارسال جدیدی دیگر برای این فایل نخواهم داشت.)
1)
cp /etc/skel/.bashrc ~/
or
touch ~/.bashrc
2)
nano ~/.bashrc
DEBEMAIL="mytest@gmail.com"
DEBFULLNAME="a b"
export DEBEMAIL DEBFULLNAME
( I used "a" for my first name and "b" for my last name )
3)
cp /home/a/Downloads/Orchis-theme-2022-05-29.tar.gz ~/Templates
4)
cd ~/Templates
5)
tar xf Orchis-theme-2022-05-29.tar.gz
6)
mkdir orchis-1
7)
cp -r Orchis-theme-2022-05-29/. orchis-1
8 )
tar -czvf orchis-1.tar.gz orchis-1
9)
rm -r Orchis-theme-2022-05-29 Orchis-theme-2022-05-29.tar.gz
10)
cd orchis-1
11)
dh_make -f ../orchis-1.tar.gz
12)
cd debian
13)
rm -r README.Debian
14)
nano rules
#!/usr/bin/make -f
THEMES_DIR=debian/orchis
%:
dh $@
override_dh_auto_install:
./install.sh -d $(CURDIR)/$(THEMES_DIR)/usr/share/themes
15)
nano copyright
Copyright:
Copyright (C) 2021-2022 by Vince vinceliuice <https://www.pling.com/u/vinceliuice/>
16)
nano control
Source: orchis
Section: x11
Priority: optional
Maintainer: a b <mytest@gmail.com>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.5.1
#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:
gnome-themes-extra,
gtk2-engines-murrine (>= 0.98),
sassc,
${misc:Depends}
Description: This is a [Material Design](https://material.io) theme for GNOME/GTK
based desktop environments.
Based on nana-4 -- [materia-theme](https://github.com/nana-4/materia-theme).
17)
nano changelog
orchis (1-1) unstable; urgency=medium
* Initial release closes: #123456
-- a b <mytest@gmail.com> Sun, 07 Aug 2022 10:05:27 +0430
18)
cd ..
19)
debuild -uc -us -b -d