اهداف
- free-ram یک برنامه است که توسط systemd هر یک دقیقه اجرا میشود.
- در این آموزش قصد داریم این برنامه را بسته بندی کنیم طوری که توسط systemd قابل فهم باشد.
پیشنیازها
- برای این منظور ابتدا یک سیستم ubuntu 16.04 ساخته و آن را آپدیت نمایید.
- بستههای زیر را نصب نمایید :
# apt-get install build-essential devscripts dh-make dh-systemd tree mc
ساخت دایکتوری برنامه
- یک دایرکتوری با هر نام ایجاد کنید. به عنوان مثال :
# mkdir -p /root/debs/
- یک دایرکتوری با نام برنامه ایجاد کنید. (به فرمت ساخت توجه نمایید.)
# mkdir -p /root/debs/free-ram-1.0.0/
- وارد دایرکتوری زیر شوید :
# cd /root/debs/
دریافت سورس برنامه
- سورس برنامه را از مخزن دریافت نمایید.
root@ubuntu16:~/debs# git clone -b systemd https://github.com/e2ma3n/free-ram
ساخت دایکتوری debian و متعلقات
- حال وارد دایکتوری بستهبندی برنامه شوید.
root@ubuntu16:~/debs/free-ram# cd ../free-ram-1.0.0/
- دستور زیر را اجرا نمایید :
root@ubuntu16:~/debs/free-ram-1.0.0# dh_make --createorig -l
Email-Address : root@unknown
License : blank
Package Name : free-ram
Maintainer Name : root
Version : 1.0.0
Package Type : library
Date : Mon, 05 Oct 2020 09:03:43 -0400
Are the details correct? [Y/n/q]
Skipping creating ../free-ram_1.0.0.orig.tar.xz because it already exists
Currently there is not top level Makefile. This mayrequire additional tuning
Done. Please edit the files in the debian/ subdirectory now.
Make sure you edit debian/control and change the Package: lines from
free-ramBROKEN to something else, such as free-ram1
- با اجرای دستور بالا یک دایکتوری به نام debian همراه با نمونه پروندههای مورد نیاز ساخته میشود.
root@ubuntu16:~/debs/free-ram-1.0.0# tree -ha . └── [4.0K] debian ├── [ 177] changelog ├── [ 2] compat ├── [ 725] control ├── [1.6K] copyright ├── [ 8] free-ram1.dirs ├── [ 20] free-ram1.install ├── [ 134] free-ram.cron.d.ex ├── [ 238] free-ram.default.ex ├── [ 20] free-ram-dev.dirs ├── [ 76] free-ram-dev.install ├── [ 526] free-ram.doc-base.EX ├── [ 28] free-ram-docs.docs ├── [ 918] init.d.ex ├── [1.6K] manpage.1.ex ├── [4.5K] manpage.sgml.ex ├── [ 11K] manpage.xml.ex ├── [ 129] menu.ex ├── [ 959] postinst.ex ├── [ 932] postrm.ex ├── [ 692] preinst.ex ├── [ 879] prerm.ex ├── [ 166] README.Debian ├── [ 251] README.source ├── [ 678] rules ├── [ 64] shlibs.local.ex ├── [4.0K] source │ └── [ 12] format └── [1.1K] watch.ex 2 directories, 27 files
- همچنین یک پرونده با نام orig از برنامه نیز ساخته میشود.
root@ubuntu16:~/debs/free-ram-1.0.0# ls ../ free-ram free-ram-1.0.0 free-ram_1.0.0.orig.tar.xz
حذف پروندههای زائد
- در ادامه وارد دایرکتوری debian شوید.
root@ubuntu16:~/debs/free-ram-1.0.0# cd debian/
- پیشنهاد میشود پروندههای زیر را پاک نمایید :
root@ubuntu16:~/debs/free-ram-1.0.0/debian# rm *.ex ; rm *.EX root@ubuntu16:~/debs/free-ram-1.0.0/debian# rm free-ram1.dirs root@ubuntu16:~/debs/free-ram-1.0.0/debian# rm free-ram-dev.dirs root@ubuntu16:~/debs/free-ram-1.0.0/debian# rm free-ram-docs.docs root@ubuntu16:~/debs/free-ram-1.0.0/debian# rm free-ram-dev.install root@ubuntu16:~/debs/free-ram-1.0.0/debian# rm README.Debian README.source
اصلاح پروندهی changelog
- پروندهی changelog را باز کنید و آن را به صورت زیر ویرایش نمایید.
root@ubuntu16:~/debs/free-ram-1.0.0/debian# vim changelog
- نسخهی خام پروندهی بالا به صورت زیر است :
free-ram (1.0.0-1) unstable; urgency=medium * Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP> -- root <root@unknown> Mon, 05 Oct 2020 09:03:43 -0400
- آن را به صورت زیر ورایش نمایید :
free-ram (1.0.0-1) xenial; urgency=medium * Initial release (Closes: #1234) -- Iman Homayouni <homayouni.iman@gmail.com> Mon, 05 Oct 2020 09:03:43 -0400
اصلاح پروندهی compat
- مقدار عدد ۴ را برای پروندهی compat در نظر بگیرید. برای این منظور :
root@ubuntu16:~/debs/free-ram-1.0.0/debian# echo 4 > compat
اصلاح پروندهی control
- در ادامه پروندهی control را باز نمایید.
root@ubuntu16:~/debs/free-ram-1.0.0/debian# vim control
- محتویات پیشفرض این پرونده به شرح زیر است :
Source: free-ram Priority: optional Maintainer: Iman Homayouni <homayouni.iman@gmail.com> Build-Depends: debhelper (>=9), dh-systemd Standards-Version: 3.9.6 Section: net Homepage: http://github.com/e2ma3n/free-ram Package: free-ram Architecture: all Depends: ${misc:Depends} Description: refresh memory every 1 minute echo 3 > /proc/sys/vm/drop_caches every 1 minute
- محتویات زیر را برای این برنامه در نظر بگیرید :
Source: free-ram Priority: optional Maintainer: Iman Homayouni <homayouni.iman@gmail.com> Build-Depends: debhelper (>=9), dh-systemd Standards-Version: 3.9.6 Section: net Homepage: http://github.com/e2ma3n/free-ram Package: free-ram Section: net Architecture: any Depends: free-ramBROKEN (= ${binary:Version}), ${misc:Depends} Description: <insert up to 60 chars description> <insert long description, indented with spaces> Package: free-ram Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: refresh memory every 1 minute echo 3 > /proc/sys/vm/drop_caches every 1 minute
اصلاح پروندهی copyright
- پروندهی copyright کاملا شخصی است. میتوانید آن را به صورت یک تک ویرایش نمایید.
root@ubuntu16:~/debs/free-ram-1.0.0/debian# echo 'Copyright: 2016-2019 (c) ...' > copyright
اصلاح پروندهی install.
- وارد دایرکتوری /root/debs/ شوید.
root@ubuntu16:~/debs/free-ram-1.0.0/debian# cd /root/debs/
- دایکتوری زیر را ایجاد کنید.
root@ubuntu16:~/debs# mkdir -p free-ram-1.0.0/usr/bin/
- پروندهی free-ram.sh را درون دایرکتوری زیر کپی کنید :
root@ubuntu16:~/debs# cp free-ram/free-ram.sh free-ram-1.0.0/usr/bin/free-ram
- پروندهی free-ram.service را درون دایکتوری debian قرار دهید.
root@ubuntu16:~/debs# cp free-ram/free-ram.service free-ram-1.0.0/debian/
- به دایکتوری debian برگردید.
root@ubuntu16:~/debs# cd free-ram-1.0.0/debian/
- پروندهی free-ram1.install را به free-ram.install تغییر دهید.
- محتویات پیشفرض پروندهی free-ram.install به صورت زیر است :
usr/lib/*/lib*.so.*
- آن را به شکل زیر ویرایش کنید.
usr/bin/free-ram usr/bin/
اصلاح پروندهی rules
- پروندهی rules را باز کنید.
root@ubuntu16:~/debs/free-ram-1.0.0/debian# vim rules
- محتویات پیشفرض این پرونده به شرح زیر است :
#!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #export DH_VERBOSE = 1 # see FEATURE AREAS in dpkg-buildflags(1) #export DEB_BUILD_MAINT_OPTIONS = hardening=+all # see ENVIRONMENT in dpkg-buildflags(1) # package maintainers to append CFLAGS #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic # package maintainers to append LDFLAGS #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ # dh_make generated override targets # This is example for Cmake (See https://bugs.debian.org/641051 ) #override_dh_auto_configure: # dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
- آز آنجایی که قصد استفاده از systemd را داریم، لذا پروندهی rules را به شکل زیر ویرایش کنید :
#!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #export DH_VERBOSE = 1 # see FEATURE AREAS in dpkg-buildflags(1) #export DEB_BUILD_MAINT_OPTIONS = hardening=+all # see ENVIRONMENT in dpkg-buildflags(1) # package maintainers to append CFLAGS #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic # package maintainers to append LDFLAGS #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ --with=systemd # dh_make generated override targets # This is example for Cmake (See https://bugs.debian.org/641051 ) #override_dh_auto_configure: # dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
اصلاح پروندهی source/format
- در ادامه پروندهی format را باز نمایید.
root@ubuntu16:~/debs/free-ram-1.0.0/debian# vim source/format
- محتویات پیشفرض این فایل (ممکن است) به صورت زیر باشد :
3.0 (quilt)
- محتویات زیر را برای پروندهی format در نظر بگیرید :
3.0 (native)
- دلیل این تغییر را در این میتوان دانست که این بستهبندی تنها حاوی یک اسکریپت ساده بوده که توسط خود شخص بسته بند برنامه نویسی شده است.
- لازم به ذکر است که در این حالت نیازی به پروندهی tar مربوط به سورس برنامه نیست.
- به طور کلی زمانی از native استفاده میشود که توسعهی سورس توسط خود بستهبند صورت گرفته باشد فلذا تغییرات درون سورس (آپدیت و …) نیز درون سورس اصلی صورت گرفته و دیگر نیاز به patch و استفاده از دایکتوری patch نیست.
- زمانی از quilt استفاده میشود که توسعه سورس توسط خود بستهبند صورت نگرفته باشد. فلذا در این حالت نیاز به پروندهی tar سورس اصلی در روند بستهبندی است. همچنین در این حالت اگر قصد تغییراتی در سورس را دارید، باید آن را در قالب patch درون دایکتوری patch اعمال نمایید.
In the debian/source/format file, there should be a single line indicating the desired format for the source package (check dpkg-source(1) for an exhaustive list). After squeeze, it should say either: 3.0 (native) for native Debian packages or 3.0 (quilt) for everything else. The newer 3.0 (quilt) source format records modifications in a quilt patch series within debian/patches. Those changes are then automatically applied during extraction of the source package. The Debian modifications are simply stored in a debian.tar.gz archive containing all files under the debian directory. This new format supports inclusion of binary files such as PNG icons by the package maintainer without requiring tricks. [60] When dpkg-source extracts a source package in 3.0 (quilt) source format, it automatically applies all patches listed in debian/patches/series. You can avoid applying patches at the end of the extraction with the --skip-patches option.
شروع بستهبندی
- برای این منظور یک دایکتوری عقب بیایید.
root@ubuntu16:~/debs/free-ram-1.0.0/debian# cd ..
- دستور زیر را برای بستهبندی اجرا نمایید :
root@ubuntu16:~/debs/free-ram-1.0.0# dpkg-buildpackage
- در صورتی که اجرا به صورت موفقیت آمیز طی شده باشد. با خروجیای مشابه زیر روبهرو خواهید شد.
root@ubuntu16:~/debs/free-ram-1.0.0# dpkg-buildpackage dpkg-buildpackage: source package free-ram dpkg-buildpackage: source version 1.0.0-1 dpkg-buildpackage: source distribution xenial dpkg-buildpackage: source changed by Iman Homayouni <homayouni.iman@gmail.com> dpkg-buildpackage: host architecture amd64 dpkg-source --before-build free-ram-1.0.0 debian/rules clean dh clean --with=systemd dh: Compatibility levels before 5 are deprecated (level 4 in use) dh_testdir dh_auto_clean dh_auto_clean: Compatibility levels before 5 are deprecated (level 4 in use) dh_clean dh_clean: Compatibility levels before 5 are deprecated (level 4 in use) dpkg-source -b free-ram-1.0.0 dpkg-source: warning: native package version may not have a revision dpkg-source: info: using source format '3.0 (native)' dpkg-source: info: building free-ram in free-ram_1.0.0-1.tar.xz dpkg-source: info: building free-ram in free-ram_1.0.0-1.dsc debian/rules build dh build --with=systemd dh: Compatibility levels before 5 are deprecated (level 4 in use) dh_testdir dh_update_autotools_config dh_update_autotools_config: Compatibility levels before 5 are deprecated (level 4 in use) dh_auto_configure dh_auto_configure: Compatibility levels before 5 are deprecated (level 4 in use) dh_auto_build dh_auto_build: Compatibility levels before 5 are deprecated (level 4 in use) dh_auto_test dh_auto_test: Compatibility levels before 5 are deprecated (level 4 in use) debian/rules binary dh binary --with=systemd dh: Compatibility levels before 5 are deprecated (level 4 in use) dh_testroot dh_prep dh_prep: Compatibility levels before 5 are deprecated (level 4 in use) dh_auto_install dh_auto_install: Compatibility levels before 5 are deprecated (level 4 in use) dh_install dh_install: Compatibility levels before 5 are deprecated (level 4 in use) dh_installdocs dh_installdocs: Compatibility levels before 5 are deprecated (level 4 in use) dh_installchangelogs dh_installchangelogs: Compatibility levels before 5 are deprecated (level 4 in use) dh_systemd_enable dh_systemd_enable: Compatibility levels before 5 are deprecated (level 4 in use) dh_installinit dh_installinit: Compatibility levels before 5 are deprecated (level 4 in use) dh_systemd_start dh_systemd_start: Compatibility levels before 5 are deprecated (level 4 in use) dh_perl dh_perl: Compatibility levels before 5 are deprecated (level 4 in use) dh_link dh_link: Compatibility levels before 5 are deprecated (level 4 in use) dh_strip_nondeterminism dh_strip_nondeterminism: Compatibility levels before 5 are deprecated (level 4 in use) dh_compress dh_compress: Compatibility levels before 5 are deprecated (level 4 in use) dh_fixperms dh_fixperms: Compatibility levels before 5 are deprecated (level 4 in use) dh_installdeb dh_installdeb: Compatibility levels before 5 are deprecated (level 4 in use) dh_gencontrol dh_gencontrol: Compatibility levels before 5 are deprecated (level 4 in use) dh_md5sums dh_md5sums: Compatibility levels before 5 are deprecated (level 4 in use) dh_builddeb dpkg-deb: building package 'free-ram' in '../free-ram_1.0.0-1_all.deb'. dh_builddeb: Compatibility levels before 5 are deprecated (level 4 in use) dh_builddeb: Compatibility levels before 5 are deprecated (level 4 in use) dpkg-genchanges >../free-ram_1.0.0-1_amd64.changes dpkg-genchanges: including full source code in upload dpkg-source --after-build freIn the debian/source/format file, there should be a single line indicating the desired format for the source package (check dpkg-source(1) for an exhaustive list). After squeeze, it should say either: 3.0 (native) for native Debian packages or 3.0 (quilt) for everything else. The newer 3.0 (quilt) source format records modifications in a quilt patch series within debian/patches. Those changes are then automatically applied during extraction of the source package. The Debian modifications are simply stored in a debian.tar.gz archive containing all files under the debian directory. This new format supports inclusion of binary files such as PNG icons by the package maintainer without requiring tricks. [60] When dpkg-source extracts a source package in 3.0 (quilt) source format, it automatically applies all patches listed in debian/patches/series. You can avoid applying patches at the end of the extraction with the --skip-patches option.e-ram-1.0.0 dpkg-buildpackage: full upload; Debian-native package (full source is included)
- در صورتی که دو دایکتوری عقبتر را ls بگیرید، میبینید که پروندههای زیر ایجاد شده است. (رنگ قرمز)
root@ubuntu16:~/debs/free-ram-1.0.0/debian# ls ../../ -1 free-ram free-ram-1.0.0 free-ram_1.0.0-1_all.deb free-ram_1.0.0-1_amd64.changes free-ram_1.0.0-1.dsc free-ram_1.0.0-1.tar.xz free-ram_1.0.0.orig.tar.xz
بررسی پروندهی DEB توسط ابزار mc
- برای این منظور ابتدا وارد دو دایکتوری عقبتر شوید.
root@ubuntu16:~/debs/free-ram-1.0.0/debian# cd ../../
- حال دستور mc را اجرا نمایید :
root@ubuntu16:~/debs# mc
- وارد پروندهی deb. شوید.
- در صورتی که بسته بندی درست انجام شده باشد باید بتوانید دایکتوری CONTENTS را ببینید.
- این دایکتوری حاوی پروندههای برنامه (در اینجا پروندهی free-ram.service و free-ram) میباشد.
تمیز کردن دایکتوری DEBIAN
- بعد از build یک سری پرونده درون دایکتوری DEBIAN ساخته میشود.
- برای پاک کردن این پروندهها (مثلا برای دوباره build کردن) به صورت زیر عمل نمایید.
root@ubuntu16:~/debs/free-ram-1.0.0# ./debian/rules clean
dh clean --with=systemd
dh: Compatibility levels before 5 are deprecated (level 4 in use)
dh_testdir
dh_auto_clean
dh_auto_clean: Compatibility levels before 5 are deprecated (level 4 in use)
dh_clean
dh_clean: Compatibility levels before 5 are deprecated (level 4 in use)