יצירת חבילת Debian כיצד

Debian Package Creation Howto



1. הקדמה

להיות אחראי על מכונה פירושו טיפול בחומרה כמו גם ברכיבי התוכנה. כפי שניתן לראות בחיי היום -יום כמנהל מערכת עדיף להתקין תוכנה כחבילה תוכנה ולא חבורה של קבצי מקור. זה מפחית את העלויות לתחזוקה נכונה של המערכת.

חבילות הזמינות מהמפיץ המועדף עליך מאומתות ומפוקחות על ידי אחראי חבילות. הוא בדק את התוכנה, ומבטיח שהיא מתאימה לחבילות התוכנה האחרות הקיימות בהפצה. יתר על כן, החבילה חתומה באמצעות מפתח GPG ממנהל החבילות. זה מבטיח את שלמות החבילה ומראה לך שהחבילה היא ממקור מהימן.







פורמט החבילה תלוי בהפצת Linux שלך. הפורמטים שנבחרו הם הפורמטים הבאים:



deb

חבילות המשמשות ב: דביאן GNU/Linux , אובונטו , ארמביאן , מנטה של ​​לינוקס , קנופיקס



rpm

חבילות המשמשות ב: כובע אדום , פדורה , CentOS , OpenSuse





tgz and txz

חבילות המשמשות ב: Slackware

tar.xz

חבילות המשמשות ב: Arch Linux



מסמך זה מסביר כיצד לבנות חבילה ל- Debian GNU/Linux בקצרה. למידע מפורט על פורמט החבילה של Debian והכלים לתחזוקה של מערכת לינוקס מבוססת Deb, ייתכן שתעיין בספר ניהול חבילות Debian. [dpmb] לבניית חבילות עבור Debian GNU/Linux מסמכים אלה חיוניים:

  • המדריך לתחזוקה החדשה של דביאן [dnmg]
  • הפניה למפתחי דביאן [GDR]
  • מדריך האריזה של דביאן [פחית]
  • מדריך המדיניות של Debian [dpm]

החבילה איתה נעבוד נקראת 'helloworld' ובעלת מספר הגירסה 0.1. למטרות הדגמה הוא פשוט מכיל סקריפט פייתון יחיד שמפיק את ההודעה המפורסמת שלום, עולם !:

#!/usr/bin/python print ('Hello, world!') 

2. דרישות

2.1. מפתח GPG

כשלב 1, זמין את מפתח ה- GPG שלך. בהמשך יהיה צורך במפתח לחתימה על החבילה. זכור שחבילות לא חתומות אינן אמינות ואינן יכולות להיות חלק מהיקום של דביאן.

במקרה שאין לך מפתח GPG עדיין צור אחד. תוכל לבצע את שלושת השלבים שלהלן. הפקודה הראשונה מייצרת מפתח חדש, השנייה מייצאת את המפתח החדש שלך לקובץ נפרד, והשלישית מוסיפה את המפתח למחזיק המפתחות האישי שלך.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

במהלך היצירה וודא שהשם הנתון _שם שלך_ נכון. מקובל להשתמש בשילוב של שם פרטי ושם משפחה. שם זה יצטרך להיות זהה בדיוק בחבילה, אם כן, בעת יצירת קובץ 'השליטה' של חבילת Debian. למידע נוסף על GPG עיין במדריך הפרטיות של GNU [gph].

2.2. שרשרת כלי האריזה

כדי לבנות חבילת Debian עם קוד מקור, חבילות התוכנה הבאות נדרשות במערכת שלך:

  • בניית-חיונית
  • הגנה אוטומטית
  • יצירת רכב
  • autotools-dev
  • dh-make
  • debhelper
  • כתובות dev
  • fakeroot
  • xutils
  • מריח
  • בונה

בתור 'root' של משתמש אתה יכול להתקין אותם באמצעות הפקודה הבאה:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. הכינו את התוכנה לאריזה

עלינו להכין ספרייה לבניית החבילה. צור ספרייה להכנת הסביבה בה נבנה את החבילה:

$ mkdir -p ~./build/helloworld/0.1 

העתק את הארכיון הדחוס `tar.gz` בספרייה:

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1 

שנה לספרייה וחלץ את החבילה:

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz 

כעת, הספרייה מכילה הן את קוד המקור בספרייה נפרדת והן את הארכיון הדחוס:

~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz 

3. דביניזציה

בשלב זה נוסיף את הקבצים הספציפיים לחבילת Debian. לכן שלב זה נקרא _Debianization_ של התוכנה. הדבר מתבצע בכמה שלבים בודדים.

3.1 הכן את מבנה החבילה

שנה לספרייה ששומרת את כל קוד המקור של החבילה. בדוגמה שלנו החבילה מכילה את הקובץ `helloworld.py`, רק:

~$ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls helloworld.py 

הוסף את הקבצים הספציפיים לחבילת Debian. הכלי `dh_make` נכנס לתמונה. המתג `-e` משתמש בכתובת הנתונה ככתובת הדוא'ל בשדה` תחזוקה` של קובץ `debian/control`. במקום בניית החבילה, השתמש בכתובת הדוא'ל שלך. זכור להשתמש באותה כתובת דוא'ל המתאימה למפתח ה- GPG שלך.

המתג `-f` משתמש בקובץ הנתון כארכיון המקור המקורי, ומדלג על העתקת עץ התוכנית הנוכחי ל-` program.orig`.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz 

בהנחיה אתה מתבקש לבחור את סוג החבילה שצריך ליצור. כדי לבחור _סינגל בינארי_קלד `s`.

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / . 

התוצאה היא ספרייה בשם 'debian':

~/build/helloworld/0.1/helloworld-0.1$ ls debian helloworld.py 

ספרייה זו מכילה את כל הקבצים הספציפיים לחבילה.

3.2. התאם את קובץ הבקרה

הקובץ 'debian/control' שומר את התלות הדרושות _ לבנות_ את החבילה. באמצעות הפקודה `dpkg -depcheck -d./Configure` תקבל רשימה עם כל החבילות הנדרשות. במקרה שלנו אין צורך בחבילה נוספת מכיוון שפייתון היא שפה מתפרשת.

לאחר מכן, עלינו לערוך את הקובץ 'debian/control' ולהוסיף ערכים ספציפיים לחבילה. לדוגמא שלנו זה נראה כך:

Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python 

3.3. התאם את קובץ זכויות היוצרים

הקובץ `debian/copyright 'מכיל את פרטי הרישיון של חבילת התוכנה. הוא מוכן לשחרור באמצעות GNU Public License 2 (GPLv2). לדוגמא שלנו זה נראה כך:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'. 

3.4. התאם את קובץ ה- changelog

לאחר פרטי זכויות היוצרים יש להתאים את הקובץ `debian/changelog`. בדוגמה שלנו אנו מוסיפים את המידע שחרור ראשוני.

helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

זה כל מה שאנחנו צריכים עד כה - עכשיו אנחנו יכולים לבנות את החבילה, סוף סוף.


4. בנה את החבילה

כדי לבנות את החבילה עלינו להעלות ספריה אחת ולהריץ את הפקודה הבאה:

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

האפשרות '-rfakeroot' מאפשרת ל- 'dpkg-buildpackage' להריץ פקודות כמשתמש בעל זכויות בעזרת הפקודה 'fakeroot'. זה הכרחי להכנת החבילה וליצירת קבצים וספריות.
הפקודה למעלה מביאה לרשימה ארוכה יותר של הודעות פלט (המוצגות כאן בסביבה בשפה הגרמנית):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends} dh_md5sums dh_builddeb dpkg-deb: Paket helloworld wird in ../helloworld_0.1-1_amd64.deb gebaut. dpkg-genchanges <../helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: 'Frank Hofmann (Hofmann EDV) < [email protected] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1. אימות החבילה

מזל טוב - הצלחת לבנות חבילת דביאן - כן! עכשיו, בואו נסתכל מקרוב על החבילה. כאן, 'lintian' נכנס לשחק. כלי זה מאמת את החבילה שלך על מנת למצוא הפרות של הכללים הנוקשים שעל חבילות Debian לעמוד בהן.

כדי להריץ את הבדיקות הקלד את הפקודה הבאה:

lintian helloworld_0.1-1_amd64.deb 

הכלי אינו מוצא הפרות חוק אלא גם שגיאות כתיב ותווים שגויים. המתג ' - פדנטי' מבקש מ'לטינאי 'להיות הרבה יותר ביקורתי מהרגיל. כפי שאתה יכול לראות להלן 'lintian' הוא קצת עצבני וגילה שלוש אזהרות ושגיאה אחת.

פרט לאזהרה הראשונה אנו יכולים בקלות לשמח את 'הלטינית' ולתקן את תכולת החבילה בהתאם לחוק הכללים. האזהרה 'חבילה חדשה-צריכה-לסגור-itp-bug' פירושה שאין דיווח על באג נגד חבילת ITP (פירושו ITP _ נועד לחבילה_). עבור חבילה רגילה של דביאן יש לשלוח לדוח באגים לאתר ה- ITP של חבילה כדי להודיע ​​לאחרים שאתה מתכוון להתחיל לארוז תוכנה זו.

4.2. אזהרה: `readme-debian-contains-debmake-template

הקובץ `README.Debian` מיועד לשמור הערות נוספות בנוגע לחבילה זו. `dh_make` יצר עבורנו את הקובץ הזה:

helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

בדוגמה שלנו אין לנו מידע נוסף, כך שנוכל למחוק את הקובץ.

4.3. אזהרה: `תיאור-מתחיל-עם-מוביל-רווחים`

אזהרה זו מועלה מכיוון שהתיאור הארוך יותר של החבילה שלנו בקובץ 'debian/control' מתחיל ביותר מרווח אחד. ברגע שאנו מסירים רווח אחד האזהרה תיעלם.

4.4. שגיאה: 'תיאור-תקציר-הוא-כפול'

כל חבילה דורשת תיאור קצר וארוך יותר ב- `debian/control`. שגיאה זו עולה מכיוון ששני התיאורים זהים. ברגע שהארכנו את התיאור הארוך יותר השגיאה נעלמה.


5. קישורים והפניות

- [ddr] אנדראס בארת ', אדם די קרלו, רפאל הרצוג, לוקאס נוסבאום, כריסטיאן שוורץ, איאן ג'קסון: הפניה למפתחי דביאן
- [Dnmg] Josip Rodin, Osamu Aoki: המדריך לתחזוקה החדשה של דביאן
- [dpmb] אקסל בקרט, פרנק הופמן: ספר ניהול חבילות דביאן
- [dpm] מדריך המדיניות של Debian
- [פחית] מדריך האריזה של דביאן
- [gph] מדריך הפרטיות של GNU
- [lushpaiPackage] אלכס לושפאי: כיצד ליצור חבילת דביאן מהמקור


6. תודות

הכותב רוצה להודות אקסל בקרט ו ג'רולד רופרטכט על תמיכתם והמבקרים בעת הכנת מאמר זה.