Your SlideShare is downloading. ×
RPM Packaging
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

RPM Packaging

1,075
views

Published on

Published in: Self Improvement, Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,075
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 趙惟倫 <bluebat@member.fsf.org> 2014 年 2 月 18 日 製作製作 RPMRPM 套件套件 TOSSUG 主題分享
  • 2. 如何安裝軟體?如何安裝軟體? *.exe *.msi *.sh *.deb *.rpm *.bin *.dmg
  • 3. 套件製作概念套件製作概念 Source code Binary files Source rpm Install rpm .spec file
  • 4. RPMRPM 套件管理系統 ( 安裝、解除安裝、驗證、 詢、更新查 ) 原名 Redhat Package Manager 後改為 RPM Package Manager 原始碼套件 (source rpm) 包含原始碼、修補與規格檔 安裝套件 (install rpm) 包含待安裝的 案與目錄檔 套件檔 (rpm file) 為 cpio 格式的封裝檔 規格檔 (spec file) 為整合所有動作的巨集文字檔 使用 RPM 來管理套件的 GNU/Linux 發行版: RedHat 、 Fedora 、 CentOS 、 SUSE 、 Mandriva… www.rpm.org
  • 5. 命名規則命名規則 主要名稱 [- 次要名稱 ]- 版本編號 - 釋出編號 . 平臺屬性 .rpm firefox xterm libs devel 2.1.3 20080724 1 2.el5 3.fc20 0.rc1.4 src i686 x86_64 armv7hl noarch 套件名稱:主要名稱 [- 次要名稱 ][. 平臺屬性 ]
  • 6. 相關套件相關套件 基本套件 – ( 必要 ) rpm, rpm-libs, rpm-python 製作套件 – ( 必要 ) rpm-build, redhat-rpm-config – ( 選用 ) rpmdevtools, rpmlint 前端套件 – ( 必要 ) yum – ( 選用 ) yum-utils, rpmorphan – ( 圖形介面 ) yumex, gnome-packagekit
  • 7. 相關路徑相關路徑 預設組建位置: $HOME/rpmbuild/* BUILD/, BUILDROOT/, RPMS/, SOURCES/, SPECS/, SRPMS/ 個人設定 :檔 $HOME/.rpmmacros #%_topdir $HOME/rpmbuild #%dist .fc20 #%fedora 20 %packager Wei-Lun Chao <bluebat@member.fsf.org>
  • 8. 組建安裝套件組建安裝套件 Source code Binary files Source rpm Install rpm .spec file
  • 9. 組建流程組建流程 開始 結束 有原始碼套件 安裝原始碼套件 修改規格檔 產生安裝套件 Y Y N N 取得原始碼 補充所需檔案
  • 10. 常用命令常用命令 RPM 製作: rpmbuild -bs 規格 案檔 rpmbuild -ba [--nodeps] 規格 案檔 rpmbuild –showrc RPM 操作: rpm -Uvh [--force|--nodeps|--test] 套件 案…檔 rpm -e [--noscripts] 套件名稱… rpm -qa [--queryformat=' 巨集變數列表 '] 套件名稱樣式 rpm -qf 案或目錄路徑檔 rpm -qi 套件名稱 |-p 套件 案檔
  • 11. 命令範例命令範例 > yumdownloader --source joe > rpm -Uvh joe-3.7-13.fc20.src.rpm > cd $HOME/rpmbuild/SPECS > ls ../SOURCES/ > $EDITOR joe.spec > rpmbuild -ba joe.spec > ls ../BUILD/joe-3.7 > rpm -qpl ../SRPMS/joe-3.7-13.fc20.src.rpm > rpm -Uvh ../RPMS/i686/joe-3.7-13.fc20.i686.rpm > rpm -ql joe
  • 12. 補充資料補充資料 基本 明:說 http://netcome.iteye.com/blog/1463791 http://hlee.iteye.com/blog/343499 http://fedoraproject.org/wiki/Zh/Docs/RPM 打包教學 網路組建服務: http://copr.fedoraproject.org/ http://build.opensuse.org/
  • 13. 來自其他發行版來自其他發行版 Source code Binary files Source rpm Install rpm .spec file
  • 14. debdeb 控制檔控制檔 忽略 debhelper, debconf 刪除 -[.0-9]* 版本號 libgnomevfs2 改為 gnome-vfs2 pkg-config 改為 pkgconfig libdbus-glib 改為 dbus-glib libgnome-menu 改為 gnome-menus libclutter 改為 clutter libgconf2 改為 GConf2 python-gnome2 改為 gnome-python2 python-dbus 改為 dbus-python python-glade2 改為 pygtk2-libglade python-serial 改為 pyserial python-notify 改為 notify-python xdg-utils 改為 pyxdg python-tz 改為 pytz -dev 改為 -devel gtkhtml 改為 gtkhtml3 libgtk2.0 改為 gtk2 libglib2.0 改為 glib2
  • 15. ALT-linuxALT-linux 規格檔規格檔 KOI8-R 或 WINDOWS-1251 另存 UTF-8 BuildPreReq: 改為 BuildRequires: Xfree86-devel 改為 libX11-devel dbus-tools-gui 改為 dbus-x11 xpm-devel 改為 libXpm-devel libgtk+2-devel 改為 gtk2-devel libncurses-devel 改為 ncurses-devel xorg-cf-files 改為 imake libqt3-devel 改為 qt-devel %__autoreconf 改為 autoreconf %_man?dir 改為 %{_mandir}/man? %_iconsdir 改為 %{_datadir}/pixmaps %_x11dir/bin 改為 %{_bindir} perl-devel 改為 perl subst 改為 sed -i qt3dirs.sh 改為 qt.sh netcat 改為 nc %make* 改為 make freetype2 改為 freetype %python_sitelibdir 改為 % {python_sitearch} libreadline-devel 改為 readline-devel %_x11sysconfdir 改為 % {_sysconfdir}/X11
  • 16. Mandriva/MageiaMandriva/Mageia 規格檔規格檔 %mkrel %rel 改為 1%{?dist} %makeinstall_std 改為 %makeinstall %_iconsdir 改為 %{_datadir}/pixmaps libnspr-devel 改為 nspr-devel libnss-devel 改為 nss-devel libxp-devel 改為 libXp-devel libxt-devel 改為 libXt-devel %_install_info 改為 install-info qt4-linguist 併入 qt4-devel gtk+2-devel 改為 gtk2-devel libimlib2-loaders 改為 imlib2 procps-devel 改為 procps libgnome2-devel 改為 libgnome-devel freetype2-devel 改為 freetype-devel %make 改為 %__make libdirectfb 改為 directfb libboost 改為 boost libx11_6 改為 libX11 qscintilla-qt4-devel 改為 qscintilla-devel %_iconsdir/hicolor 改為 % {_datadir}/icons/hicolor %{_libdir}/apache- extramodules 改為 % {_libdir}/httpd/modules %py_platsitedir 改為 % {python_sitearch}
  • 17. PLD/SUSEPLD/SUSE 規格檔規格檔 Release: 之後附加 %{?dist} ISO-8859-2 字集改為 UTF-8 %rpmcflags 改為 %optflags %rpmldflags 改為 -s %tmpdir 改為 %_tmppath %_desktopdir 改為 % {_datadir}/applications %_pixmapsdir 改為 % {_datadir}/pixmaps %date 改為上一次 revision 日期 perl-base 改為 perl OpenGL 改為 mesa-lib OpenGL-GLX 改為 mesa-libGL sgmltool 改為 linuxdoc-tools update-alternatives 改為 chkconfig libsmpeg 改為 smpeg Mesa 改為 mesa-libGL python-pygame 改為 pygame python-gtk 改為 pygtk2 update-desktop-files 改為 desktop- file-utils 刪除 %debug_package %install_info 改為 install-info
  • 18. 補充資料補充資料 搜尋套件: http://koji.fedoraproject.org/ http://rpm.pbone.net/ http://rpmfind.net/ http://www.rpmseek.com/ http://pkgs.org/ http://software.opensuse.org/search http://sisyphus.ru/ http://packman.links2linux.de/
  • 19. 規格檔內容規格檔內容 Source code Binary files Source rpm Install rpm .spec file
  • 20. 輔助命令輔助命令 新建: rpmdev-newspec foo.spec 檢 :查 rpmlint foo.spec 模板: Name: foo Version: Release: 1%{?dist} Summary: License: URL: Source0: %description %prep %setup -q %build %configure make %{?_smp_mflags} %install %make_install %files %doc %changelog
  • 21. 內容結構內容結構 常用 屬性區段 描述區段 準備區段 組建區段 安裝區段 案區段檔 變更記錄區段 選用 定義區段 次套件屬性區段 次套件描述區段 次套件 案區段檔 命令稿區段 次套件命令稿區段
  • 22. 定義區段定義區段 明:說 以 %global 起始的巨集定義 選用組合: %global realname Foo %global svn 384 %global _missing_build_ids_terminate_build %{nil} %global debug_package %{nil} %global __debug_install_post %{nil} %global __arch_install_post %{nil} %global __os_install_post %{nil} %global __spec_install_post %{nil}
  • 23. 屬性區段屬性區段 明:說 以 %package 起始的屬性定義 只含單一套件則省略此巨集 常用組合: Name: foo Summary: A Multimedia Tool Version: 1.2.3svn384 Release: 1%{?dist} URL: http://www.foo.org/ License: MIT Source0: http://www.foo.org/% {name}-%{version}.tar.gz BuildRequires: bar1-devel BuildRequires: desktop-file-utils 選用組合: Summary(zh_TW): 繁中概要 Source1: foo.png Patch0: foo-desktop.patch Patch1: foo.zh_TW.patch AutoReqProv: off Requires: bar1, bar2 Provides: libfoo Obsoletes: foo-beta BuildArch: noarch
  • 24. 描述區段描述區段 明:說 以 %description 起始的描述 常用組合: %description Foo is a tool for multimedia files. 選用組合: %description -l zh_TW Foo 是用於多媒體 案的工具。檔
  • 25. 次套件屬性、描述區段次套件屬性、描述區段 明:說 以 %package 起始的屬性定義 以 %description 起始的描述 常用組合: %package devel Summary: A Multimedia Tool Requires: %{name} = %{version}-% {release} %description devel Development files for %{name}. 選用組合: %package -n lib%{name} Summary: A Multimedia Tool %description -n lib%{name} Library files for %{name}. %description -n lib%{name} -l zh_TW %{name} 所需的函式庫 案。檔
  • 26. 準備區段準備區段 明:說 以 %prep 起始的前置動作 %setup 解壓後進入工作目錄 %{name}-%{version} 常用組合 ( 附加 ) : %setup -q %setup -qc %setup -qn %{realname} %setup -qa 1 %setup -T %setup -qTb 1 -n % {realname} 選用組合 ( 附加 ) : %setup -q %patch0 %patch1 -p2 %patch2 -p1 %setup -q cp %{SOURCE1} data sed -i '1i #include <cstdio>|' m.cpp sed -i 's|2.18.0|2.14.0|' configure* sed -i '/curl/types.h/d' src/url_utils.c
  • 27. 組建區段組建區段 明:說 以 %build 起始的組建動作 會先進入工作目錄 有些 noarch 套件不需此巨集 常用組合 ( 附加 ) : %configure %__make %{?_smp_mflags} export LIBS="-lX11" ./configure --prefix=/usr --disable- static %__make 選用組合 ( 附加 ) : cmake . -DCMAKE_INSTALL_PREFIX=/usr %__make %_qt4_qmake PREFIX=/usr %__make xmkmf -a %__make python setup.py build gcc -Wl,-soname,libfoo.so.0 -fPIC -shared -o libfoo.so.0 -I. libfoo.c gcc -o foo *.o -ldl -lm scons build prefix=/usr
  • 28. 安裝區段安裝區段 明:說 以 %install 起始的安裝動作,會先進入工作目錄 常用組合 ( 附加 ) : %make_install desktop-file-validate %{buildroot}/%{_desktopdir}/%{name}.desktop %find_lang %{name} 選用組合 ( 附加 ) : python setup.py install -O1 --root=%{buildroot} install -Dm755 %{name} %{buildroot}%{_bindir}/%{name} mkdir -p %{buildroot}%{_datadir}/%{name}
  • 29. 檔案區段檔案區段 // 次套件次套件 明:說 以 %files 起始的 案列表檔 常用組合: %files -f %{name}.lang %doc AUTHORS COPYING NEWS %{_bindir}/%{name} %{_datadir}/%{name} %{_mandir}/man?/%{name}.* %{_desktopdir}/*.desktop %{_datadir}/pixmaps/*.png 選用組合: %files %{_bindir}/%{name} %{_datadir}/locale/*/LC_MESSAGES/* %files devel %{_libdir}/%{name}/*.so %{_libdir}/pkgconfig/*.pc %{_includedir}/%{name} %exclude %{_libdir}/%{name}/*.la
  • 30. 命令稿區段命令稿區段 // 次套件次套件 明:說 %pre,%preun, %post,%postun ( 安裝、解除之前 / 後 ) 等巨集起始的命令稿 常用組合: %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %post /usr/bin/fc-cache %postun 選用組合: %post data %{_bindir}/update-mime-database % {_datadir}/mime &> /dev/null %{_bindir}/gtk-update-icon-cache --quiet %{_iconsdir}/hicolor %postun data %{_bindir}/update-mime-database % {_datadir}/mime &> /dev/null %{_bindir}/gtk-update-icon-cache --quiet %{_iconsdir}/hicolor
  • 31. 變更記錄區段變更記錄區段 明:說 以 %changelog 起始的變更記錄,最近一次修改在最上方 常用組合 ( 附加 ) : * Tue Feb 18 2014 Wei-Lun Chao <bluebat@member.fsf.org> 1.0-2 - Rebuild for FC20 選用組合 ( 附加 ) : * Tue Feb 18 2014 Wei-Lun Chao <bluebat@member.fsf.org> 2.0-1 - Update to 2.0 - Add locale file for zh_TW
  • 32. 補充資料補充資料 進階 明:說 http://fedoraproject.org/wiki/How_to_create_an_RPM_package http://wiki.meego.com/Packaging/Guidelines http://docs.fedoraproject.org/en- US/Fedora_Draft_Documentation/0.1/html- single/RPM_Guide/index.html http://www.rpm.org/max-rpm/
  • 33. 原始碼套件組成原始碼套件組成 Source code Binary files Source rpm Install rpm .spec file
  • 34. 嵌入檔案嵌入檔案 .src.rpm .spec Source0: .tar.gz .tar.bz2 .tar.xz .zip Patch*: .diff.gz .patch Source*: .rar .7z .rpm .deb .jar .swf .po .ts .ico .gif .png .desktop .sh
  • 35. 取得原始碼取得原始碼 直接下載原始碼軟體包 或是 製後再壓縮封裝仿 git clone git://github.com/user/foo.git bzr branch lp:foo svn export http://foo.sourceforge.net/trunk/foo hg clone http://code.google.com/p/foo/ fossil clone http://www.fossil-scm.org/foo
  • 36. .rar .7z (.rar .7z ( 特殊格式特殊格式 )) 使用 .rar : Source0: %{name}-src-%{version}.rar BuildRequires: unrar %prep %setup -T -c unrar x %{SOURCE0} 使用 .7z : Source0: %{name}-%{version}.7z BuildRequires: p7zip
  • 37. .rpm .deb (.rpm .deb ( 安裝套件安裝套件 )) 使用 .rpm : Release: 1%{?dist}.bin Source0: %{name}-%{version}- 1.i386.rpm %prep %setup -T -c rpm2cpio %{SOURCE0} | cpio -i --make-directories %install mkdir -p %{buildroot} cp -a * %{buildroot} 使用 .deb : Release: 1%{?dist}.bin Source0: %{name}_%{version}- 1_i386.deb %prep %setup -T -c ar -x %{SOURCE0} %install mkdir -p %{buildroot} tar xf data.tar.gz -C %{buildroot} 備註:
  • 38. .jar .swf (.jar .swf ( 虛擬架構軟體虛擬架構軟體 )) 使用 .jar : Release: 1%{?dist}.bin Source0: %{name}.jar Requires: jre BuildArch: noarch %prep %setup -T -c unzip -p %{SOURCE0} gui/icon.png > %{buildroot}%{_datadir}/%{name}/% {name}.png cp %{SOURCE0} %{buildroot}% {_datadir}/%{name}/%{name}.jar 使用 .swf : Release: 1%{?dist}.bin Source0: %{name}.swf Requires: flash-player BuildArch: noarch %prep %setup -T -c cp %{SOURCE0} %{buildroot}% {_datadir}/%{name}.swf
  • 39. .po .ts (.po .ts ( 訊息翻譯訊息翻譯 )) 使用: Source1: %{name}-1.2.3.zh_TW.po BuildRequires: gettext %prep #sed -i 's/LINGUAS="/LINGUAS="zh_TW /' configure* echo zh_TW >> po/LINGUAS cp %{SOURCE1} po/zh_TW.po %build #make -C po zh_TW.gmo #msgfmt po/zh_TW.po -o po/zh_TW.gmo %install #msgfmt %{SOURCE1} -o %{buildroot}% {_datadir}/locale/zh_TW/LC_MESSAGES/%{name}.mo
  • 40. .ico .gif .png (.ico .gif .png ( 圖示圖示 )) 取得: 從軟體網站或搜尋自 http://www.google.com.tw/imghp 使用: Source1: %{name}.ico BuildRequires: ImageMagick %prep convert -transparent white %{SOURCE1} %{name}.png %install install -Dm644 %{name}.png %{buildroot}%{_datadir}/pixmaps/% {name}.png
  • 41. .desktop (.desktop ( 選單選單 )) 使用: Source1: %{name}.desktop %install desktop-file-install %{SOURCE1} --dir=%{buildroot}%{_desktopdir} 備註: Categories=AudioVideo;Developm ent;Education;Network;Graphics; Office;Settings;System;Utility;Ga me; 嵌:內 %setup cat << EOF > %{name}.desktop [Desktop Entry] Encoding=UTF-8 Name=%{realname} Comment=%{summary} Exec=%{name} Icon=%{name} Terminal=false Type=Application Categories=Application;Graphics;Viewer ; EOF
  • 42. .sh (.sh ( 命令稿命令稿 )) 使用: Source1: %{name}.sh %install install -Dm755 %{SOURCE1} %{buildroot}%{_bindir}/%{name} 嵌:內 %install cat > %{buildroot}%{_bindir}%{name} << EOF #!/bin/bash cd %{_datadir}/%{name} exec ./%{name} EOF chmod 755 %{buildroot}%{_bindir}/%{name}
  • 43. .diff.gz (deb.diff.gz (deb 修補修補 )) 來源: Debian 原始碼庫所提供的修補檔 使用: Patch0: %{name}.diff.gz %setup %patch0 -p1 %build while read i; do mkdir -p debian/%{name}$i; done < debian/dirs %install mkdir -p %{buildroot} cp -pr debian/%{name}/* %{buildroot}
  • 44. .patch (.patch ( 原始碼修補原始碼修補 )) 使用 diff : 程式來自 diffutils 套件,是較為傳統的一般做法。 假設軟體 foo 的原始碼軟體包展開後為一個目錄 foo-x.y.z 1. 執行 cp -a foo-x.y.z foo-x.y.z.orig 以備份未修改版本 2. 進入 foo-x.y.z 目錄以修改程式 3. 執行 cp -a foo-x.y.z foo-x.y.z.fixed 4. 進入 foo-x.y.z.fixed 目錄以組建軟體並測試成果 5. 修改完成時回到上層目錄,否則回到步驟 2. 6. 執行 diff -Nur foo-x.y.z.orig foo-x.y.z > foo-x.y.z-what.patch
  • 45. .patch (.patch ( 原始碼修補原始碼修補 )) 使用 gendiff : 程式來自 rpm-build 套件,是較為適合原始碼套件的做法。 假設組建時將原始碼展開於 $HOME/ rpmbuild/ BUILD/ foo-x.y.z 1. 執行 find foo-x.y.z -name *.orig 若已有此類 案則另選副 名檔 檔 2. 進入 foo-x.y.z 目錄以備份每個將要修改的程式 cp bar.c bar.c.orig 3. 如果要新增 案則先檔 touch new.c new.c.orig 4. 修改程式並組建軟體與測試,全部完成時回到上層目錄 5. 執行 gendiff foo-x.y.z .orig > ../ SOURCES/ foo-x.y.z-what.patch
  • 46. 非典型安裝套件非典型安裝套件 Source code Binary files Source rpm Install rpm .spec file
  • 47. rpm5rpm5 明說 Jeff Johnson 基於 rpm-4.x 繼續開發 與 RedHat 主導的 4.x 版同時安裝會產生衝突 現況 2012-07-06 版本 5.4.10 <http://rpm5.org> 套件 × Fedora 套件庫 △其他 RPM 套件庫 × 各類 DEB 套件庫
  • 48. rpmrebuildrpmrebuild 明說 從已安裝於系統中的套件反向製作出安裝套件 會包入修改過的 案,亦可加入新 案檔 檔 現況 2013-01-18 版本 2.9 <http://rpmrebuild.sourceforge.net/> 套件 ○ Fedora 套件庫 ○其他 RPM 套件庫 × 各類 DEB 套件庫
  • 49. checkinstallcheckinstall 明說 藉由監視安裝過程,將異動 案反向製成各類套件檔 利用交互介面、命令列參數或設定 來取得資訊檔 現況 2009-11-26 版本 1.6.2 <http://checkinstall.izto.org> 套件 × Fedora 套件庫 ○其他 RPM 套件庫 ○各類 DEB 套件庫 使用 checkinstall 原本安裝指令
  • 50. alienalien 明說 各類套件格式的轉換軟體 執行時依賴 DEB 套件系統 現況 2012-08-10 版本 8.88 <http://joeyh.name/code/alien/> 套件 × Fedora 套件庫 ○其他 RPM 套件庫 ○各類 DEB 套件庫 使用 alien --to-rpm 套件 名檔
  • 51. 其他工具其他工具 debian2spec : from Debian source directory cabal2spec : from Haskell Cabel package oct2spec : from Octave package R2spec : from R package pyp2rpm : from Python index package gem2rpm : from Ruby gems package cpan2rpm : from Perl module package npm2rpm : from Node.js module package
  • 52. 規格檔注意事項規格檔注意事項 Source code Binary files Source rpm Install rpm .spec file
  • 53. 一般一般 案應以檔 UTF-8 編碼、無 BOM 的純文字格式儲存 案本身權限應為檔 644 各區段以空一列分隔較為清楚 描述區段中的文字應於超過 80 欄之前換列 專屬軟體 License: 可用 Commercial ;一般開放原始碼可用 MIT,Apache License,PD ;自由軟體可用 GPL,LGPL ;免費 軟體可用 freeware,shareware 新增 %changelog 應註明 Version 與 Release 不可將非自製軟體 tarball 修改後重新封裝 套件應在異種平臺以一般使用者身分測試組建、執行
  • 54. 巨集規則巨集規則 要接參數的巨集名稱不可加上大括號 巨集會先由 rpmbuild 解析,不受引號的限制 巨集是依組建系統的環境展開,而非安裝系統 %{} 與 %() 的用法類似對應的 bash 用法 $HOME/.rpmmacros 中可定義 dist,packager,buildroot 內嵌 script 案時,注意檔 $ 與 % 之前要加 可利用列首加 # 以備註,列首巨集則應將 % 改為 # 條件判斷巨集: %if ... %else ... %endif 架構判斷巨集: %ifarch ... %else ... %endif %clean 已不再需要
  • 55. 路徑巨集路徑巨集 %{_prefix}→/usr %{_bindir}→/usr/bin %{_sbindir}→/usr/sbin %{_libdir}→/usr/%{_lib} %{_includedir}→/usr/include %{_sysconfdir}→/etc %{_datadir}→/usr/share %{_mandir}→%{_datadir}/man %{_desktopdir}→%{_datadir}/applications %{_iconsdir}→%{_datadir}/icons %{python_sitelib}→/usr/lib/python2.*/site-packages
  • 56. 定義、屬性定義、屬性 使用 %global 替代 %define 屬性 Name 應與規格 主 名相同且不可有句點檔 檔 屬性 Packger,BuildRoot,Group,Epoch 不需要 屬性 Vendor,PreReq 不應設定 Summary 首字母大寫且不以句點結尾 修改後 Release 應加 1 ,版本如果更新則重置為 1 加強版 Release 加後綴 . 代號,搶鮮版再多加前綴 0. Source0 應為實際 名做結尾的完整檔 URL ,例外應加備註 Copyright 屬性已被 License 替代 Requires 與 BuildRequires 儘量每列一項
  • 57. 組建、安裝組建、安裝 組建過程中不應有連線下載的動作 安裝過程會自動先執行清除 BuildRoot 以 %make_install 替代 %makeinstall 使用 %find_lang %{name} 與 %files -f %{name}.lang python setup.py install 時不應使用 INSTALLED_FILES 來源 案應以工作目錄的相對路徑指定檔 %{buildroot} 與 $RPM_BUILD_ROOT 相同 不應在過程中直接修改 %{SOURCE*} 內容 以 desktop-file-utils 套件來安裝或驗證 .desktop 案檔
  • 58. 檔案、命令稿檔案、命令稿 %doc 指定安裝於 %{_datadir}/doc/%{name} 的文件 不需多寫預設的 %defattr(-,root,root,0755) 不可安裝於 /bin,/sbin,/opt,/usr/local 安裝共享函式庫於系統路徑的套件,應在命令稿中執 行 /sbin/ldconfig 不應安裝 *.la 類型的 案檔 %files 中儘量使用路徑巨集 %files 只應列出專屬該套件的 案或最上層目錄檔 %{_libdir} 之後不可只使用 * 以避免安裝 debug 目錄 呼叫 sh 的 if 時,只能使用 [ ] 而無法用 test
  • 59. 補充資料補充資料 製作準則: http://fedoraproject.org/wiki/Packaging:ReviewGuidelines http://fedoraproject.org/wiki/Packaging:NamingGuidelines http://fedoraproject.org/wiki/Packaging:Guidelines http://fedoraproject.org/wiki/Packaging:Python
  • 60. 謝謝各位 敬請指教 簡報模板:資訊未來大自由 ( 孫賜萍 )