1. 程式人生 > >rpm打包,rpmbuild SPEC檔案深度說明

rpm打包,rpmbuild SPEC檔案深度說明

關鍵字 
spec指令碼包括很多關鍵字,主要有:
引用Name: 軟體包的名稱,後面可使用%{name}的方式引用
Summary: 軟體包的內容概要
Version: 軟體的實際版本號,例如:1.0.1等,後面可使用%{version}引用
Release: 釋出序列號,例如:1linuxing等,標明第幾次打包,後面可使用%{release}引用
Group: 軟體分組,建議使用標準分組
License: 軟體授權方式,通常就是GPL
Source: 原始碼包,可以帶多個用Source1、Source2等源,後面也可以用%{source1}、%{source2}引用
BuildRoot: 這個是安裝或編譯時使用的“虛擬目錄”,考慮到多使用者的環境,一般定義為:

%{_tmppath}/%{name}-%{version}-%{release}-root

%{_tmppath}/%{name}-%{version}-%{release}-buildroot-%(%{__id_u} -n}
該引數非常重要,因為在生成rpm的過程中,執行make install時就會把軟體安裝到上述的路徑中,在打包的時候,同樣依賴“虛擬目錄”為“根目錄”進行操作。
後面可使用$RPM_BUILD_ROOT 方式引用。
URL: 軟體的主頁
Vendor: 發行商或打包組織的資訊,例如RedFlag Co,Ltd
Disstribution: 發行版標識
Patch: 補丁原始碼,可使用Patch1、Patch2等標識多個補丁,使用%patch0或%{patch0}引用
Prefix: %{_prefix} 這個主要是為了解決今後安裝rpm包時,並不一定把軟體安裝到rpm中打包的目錄的情況。這樣,必須在這裡定義該標識,並在編寫%install指令碼的時候引用,才能實現rpm安裝時重新指定位置的功能
Prefix: %{_sysconfdir} 這個原因和上面的一樣,但由於%{_prefix}指/usr,而對於其他的檔案,例如/etc下的配置檔案,則需要用%{_sysconfdir}標識
Build Arch: 指編譯的目標處理器架構,noarch標識不指定,但通常都是以/usr/lib/rpm/marcros中的內容為預設值
Requires: 該rpm包所依賴的軟體包名稱,可以用>=或<=表示大於或小於某一特定版本,例如:
libpng-devel >= 1.0.20 zlib 
※“>=”號兩邊需用空格隔開,而不同軟體名稱也用空格分開
還有例如PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是針對不同階段的依賴指定 
Provides: 指明本軟體一些特定的功能,以便其他rpm識別
Packager: 打包者的資訊
%description 軟體的詳細說明


spec指令碼主體 
spec指令碼的主體中也包括了很多關鍵字和描述,下面會一一列舉。我會把一些特別需要留意的地方標註出來。
%prep 預處理指令碼
%setup -n %{name}-%{version} 把原始碼包解壓並放好
通常是從/usr/src/asianux/SOURCES裡的包解壓到/usr/src/asianux/BUILD/%{name}-%{version}中。
一般用%setup -c就可以了,但有兩種情況:一就是同時編譯多個原始碼包,二就是原始碼的tar包的名稱與解壓出來的目錄不一致,此時,就需要使用-n引數指定一下了。
%patch 打補丁
通常補丁都會一起在原始碼tar.gz包中,或放到SOURCES目錄下。一般引數為:

%patch -p1 使用前面定義的Patch補丁進行,-p1是忽略patch的第一層目錄
%Patch2 -p1 -b xxx.patch 打上指定的補丁,-b是指生成備份檔案
◎補充一下 
引用%setup 不加任何選項,僅將軟體包開啟。 
%setup -n newdir 將軟體包解壓在newdir目錄。 
%setup -c 解壓縮之前先產生目錄。 
%setup -b num 將第num個source檔案解壓縮。 
%setup -T 不使用default的解壓縮操作。 
%setup -T -b 0 將第0個原始碼檔案解壓縮。 
%setup -c -n newdir 指定目錄名稱newdir,並在此目錄產生rpm套件。 
%patch 最簡單的補丁方式,自動指定patch level。 
%patch 0 使用第0個補丁檔案,相當於%patch ?p 0。 
%patch -s 不顯示打補丁時的資訊。 
%patch -T 將所有打補丁時產生的輸出檔案刪除。
%configure 這個不是關鍵字,而是rpm定義的標準巨集命令。意思是執行原始碼的configure配置
在/usr/src/asianux/BUILD/%{name}-%{version}目錄中進行 ,使用標準寫法,會引用/usr/lib/rpm/marcros中定義的引數。
另一種不標準的寫法是,可參考原始碼中的引數自定義,例如:
引用CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix}%build 開始構建包
在/usr/src/asianux/BUILD/%{name}-%{version}目錄中進行make的工作 ,常見寫法:
引用make %{?_smp_mflags} OPTIMIZE="%{optflags}"都是一些優化引數,定義在/usr/lib/rpm/marcros中
%install 開始把軟體安裝到虛擬的根目錄中
在/usr/src/asianux/BUILD/%{name}-%{version}目錄中進行make install的操作。這個很重要,因為如果這裡的路徑不對的話,則下面%file中尋找檔案的時候就會失敗。 常見內容有:
%makeinstall 這不是關鍵字,而是rpm定義的標準巨集命令。也可以使用非標準寫法:
引用make DESTDIR=$RPM_BUILD_ROOT install或 引用make prefix=$RPM_BUILD_ROOT install需要說明的是,這裡的%install主要就是為了後面的%file服務的。所以,還可以使用常規的系統命令:
引用install -d $RPM_BUILD_ROOT/
cp -a * $RPM_BUILD_ROOT/
%clean 清理臨時檔案
通常內容為:
引用[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
rm -rf $RPM_BUILD_DIR/%{name}-%{version}
※注意區分$RPM_BUILD_ROOT和$RPM_BUILD_DIR:
$RPM_BUILD_ROOT是指開頭定義的BuildRoot,而$RPM_BUILD_DIR通常就是指/usr/src/asianux/BUILD,其中,前面的才是%file需要的。 

%pre rpm安裝前執行的指令碼
%post rpm安裝後執行的指令碼
%preun rpm解除安裝前執行的指令碼
%postun rpm解除安裝後執行的指令碼%preun %postun 的區別是什麼呢?前者在升級的時候會執行,後者在升級rpm包的時候不會執行

%files 定義那些檔案或目錄會放入rpm中
這裡會在虛擬根目錄下進行,千萬不要寫絕對路徑,而應用巨集或變量表示相對路徑。 如果描述為目錄,表示目錄中除%exclude外的所有檔案。
%defattr (-,root,root) 指定包裝檔案的屬性,分別是(mode,owner,group),-表示預設值,對文字檔案是0644,可執行檔案是0755

%exclude 列出不想打包到rpm中的檔案
※小心,如果%exclude指定的檔案不存在,也會出錯的。 
%changelog 變更日誌

※特別需要注意的是:%install部分使用的是絕對路徑,而%file部分使用則是相對路徑,雖然其描述的是同一個地方。千萬不要寫錯。
就是%file中必須明白,用的是相對目錄 引用%files 
%defattr(-,root,root) 
%{_bindir} 
%{_libdir} 
%{_datadir} 
%exclude %{_libdir}/debug

如何編寫%file段 
由於必須在%file中包括所有套件中的檔案,所以,我們需要清楚編譯完的套件到底包括那些檔案?
常見的做法是,人工模擬一次編譯的過程:

 這樣,整個套件的內容就會被放到/usr/local/xxx中,可根據情況編寫%file和%exclude段。

※當然,這個只能對原始碼按GNU方式編寫,並使用GNU autotool建立的包有效,若自定義Makefile則不能一概而論。 
關於rpm中的執行指令碼 
如果正在製作的rpm包是準備作為放到系統安裝光碟中的話,則需要考慮rpm中定義的指令碼是否有問題。由於系統在安裝的時候只是依賴於一個小環境進行,而該環境與實際安裝完的環境有很大的區別,所以,大部分的指令碼在該安裝環境中都是無法生效,甚至會帶來麻煩的。
所以,對於這樣的,需要放到安裝光碟中的套件,不加入執行指令碼是較佳的方法。
另外,為提供操作中可參考的資訊,rpm還提供了一種訊號機制:不同的操作會返回不同的資訊,並放到預設變數$1中。
引用0代表解除安裝、1代表安裝、2代表升級

一.RPM製作步驟

我們在企業中有的軟體基本都是編譯的,我們每次安裝都得編譯,那怎麼辦呢?那就根據我們的需求製作RPM安裝包吧。先來說說基本布驟:

1.Planning what you want             計劃做什麼rpm包。軟體的?庫的?

2.Gathering the software to package  收集原材料,即收集原始碼包

3.Patch the software as need         如果需要打補丁,收集補丁檔案。此布驟不是必須

4.Outling any dependenies      確定依賴關係包

------------------  上述動作可由我們手動編譯一次軟體來確定  -------------------

5.Building RPMs                      開始動手製作RPM包

5.1 Set up the directory stucture 設定好目錄結構,我們在這些目錄中製作我們的RPM包,我們需要下列目錄

BUILD 原始碼解壓後的存放目錄

RPMS    製作完成後的RPM包存放目錄,裡面有與平臺相關的子目錄

SOURCES 收集的源材料,補丁的存放位置

SPECS   SPEC檔案存放目錄

SRMPS   存放SRMPS生成的目錄

5.2 Place the Sources in the right directory   把源材料放到正確的位置

5.3 Create a spec file that tell rpmbuild command what to do 建立spec檔案,這是綱領檔案,rpmbuild命令根據spec檔案來製作合適的rpm包

5.4 Build the source and binary RPMS 製作src或二進位制rpm包

6.Test RPMS 測試製作的PRM包

7.Add signature for RPM  為RPM包簽名

二.RPM包製作例項

我還是用連貫的 話為大家敘述一遍吧,我們首先確實我們要為什麼做rpm包,通常我們是為一些軟體,比如httpd,nginx等,然後去收集這些軟體包的原始碼,如果有 需要的話也收集這些補丁檔案,手動編譯安裝一下這個軟體(當然如果是不需要編譯的就不用演練了),確定依賴的軟體包,並記錄下來,下面開始準備製作 tengine的PRM包吧:

1.建立一個普通使用者,有普通使用者來製作rpm,用root的可能會因為程式碼問題導致毀滅的後果

  1. useradd ibuler 
  2. su - ibuler 

2.確定我們在 哪個目錄下製作RPM,通常這個目錄我們topdir,這個需要在巨集配置檔案中指定,這個配置檔案稱為macrofiles,它們通常為 /usr/lib/rpm/macros:/usr/lib/rpm/macros.*:~/.rpmmacros,這個在rhel 5.8中可以通過rpmbuild --showrc | grep macrofiles  檢視,6.3的我使用這個找不到,但使用是一樣的。你可以通過rpmbuild --showrc | grep topdir 檢視你係統預設的工作車間 

  1. rpmbuild --showrc | grep topdir 
  2. -14: _builddir  %{_topdir}/BUILD 
  3. -14: _buildrootdir  %{_topdir}/BUILDROOT 
  4. -14: _rpmdir    %{_topdir}/RPMS 
  5. -14: _sourcedir %{_topdir}/SOURCES 
  6. -14: _specdir   %{_topdir}/SPECS 
  7. -14: _srcrpmdir %{_topdir}/SRPMS 
  8. -14: _topdir    %{getenv:HOME}/rpmbuild 

我們還是自定義工作目錄(或車間)吧

  1. vi ~/.rpmmacros 
  2. %_topdir        /home/ibuler/rpmbuild    ##目錄可以自定義 
  3. mkdir ~/rpmbuild  

3.在topdir下建立需要的目錄

  1. cd ~/rpmbuild  
  2. mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} 

4.把收集的原始碼放到SOURCES下

  1. cp /tmp/tengine-1.4.2.tar.gz SOURCES  ##事先放好的

5.在SPECS下建立重要的spec檔案

  1. cd SPECS 
  2. vi tengine.spec          ##內容見後講解,rhel6.3會自動生成模板 

6.用rpmbuild命令製作rpm包,rpmbuild命令會根據spec檔案來生成rpm包 

  1. rpmbuild  
  2. -ba 既生成src.rpm又生成二進位制rpm 
  3. -bs 只生成src的rpm 
  4. -bb 只生二進位制的rpm 
  5. -bp 執行到pre 
  6. -bc 執行到 build段 
  7. -bi 執行install段 
  8. -bl 檢測有檔案沒包含 

我們可以一步步試,先rpmbuild -bp ,再-bc 再-bi 如果沒問題,rpmbuild -ba 生成src包與二進位制包吧

7.安裝測試有沒有問題,能否正常安裝執行,能否正常升級,解除安裝有沒有問題

root使用者測試安裝:

  1. cd /tmp
  2. cp /home/ibuler/rpmbuild/RPMS/x86_64/tengine-1.4.2-1.el6.x86_64.rpm /tmp  
  3. rpm -ivh tengine-1.4.2-1.el6.x86_64.rpm  ##測試安裝 
  4. rpm -e tengine                           ##測試解除安裝,如果版本號比原來的高,升級測試 

8.如果沒問題為rpm包簽名吧,防止有人惡意更改    ##這個先不寫了,有點晚了,以後補上

到此整個流程完畢。下面來說說其中最最重要的spec的格式,先說最簡單的,最容易實現的

到此一個簡單的tengine RPM包製作好了。

三.RPM包製作拓展

下面我們來拓展一下,比如:我們想為tengine增加控制指令碼,可以通過 start|stop控制,我們還想更換一下預設的首頁index.html,預設的fastcgi_params是不能直接連線php的,所以我們替換 為新的配置檔案,我們也可以用設定好的nginx.conf替換原來的nginx.conf。基於上述步驟下面繼續

1.把修改後的首頁檔案index.html,控制指令碼init.nginx,fastCGI配置檔案fastcgi_params,Nginx配置檔案nginx.conf 放到SOURCES中 。 

  1. [[email protected] rpmbuild]$ ls SOURCES/ 
  2. fastcgi_params  index.html  init.nginx  nginx.conf  tengine-1.4.2.tar.gz 

2 編輯tengine.spec,修改

2.1 介紹區域的SOURCE0下增加如下

  1. Source0:        %{name}-%{version}.tar.gz 
  2. Source1:        index.html 
  3. Source2:        init.nginx 
  4. Source3:        fastcgi_params 
  5. Source4:        nginx.conf 

2.2 安裝區域增加如下

  1. make install DESTDIR=%{buildroot} 
  2. %{__install} -p -D %{SOURCE1} %{buildroot}/usr/html/index.html  #%{__install}這個巨集代表install命令
  3. %{__install} -p -D -m 0755 %{SOURCE2} %{buildroot}/etc/rc.d/init.d/nginx 
  4. %{__install} -p -D %{SOURCE3} %{buildroot}/etc/nginx/fastcgi_params 
  5. %{__install} -p -D %{SOURCE4} %{buildroot}/etc/nginx/nginx.conf 

2.3 指令碼區域增加如下

  1. %post 
  2. if [ $1 == 1 ];then 
  3.         /sbin/chkconfig --add nginx 
  4. fi 

2.4 %file區域增加如下

  1. %files 
  2. %defattr (-,root,root,0755) 
  3. /etc/ 
  4. /usr/ 
  5. /var/ 
  6. %config(noreplace) /etc/nginx/nginx.conf  #%config表明這是個配置檔案noplace表明不能替換
  7. %config(noreplace) /etc/nginx/fastcgi_params 
  8. %doc /usr/html/index.html  #%doc表明這個是文件
  9. %attr(0755,root,root) /etc/rc.d/init.d/nginx #%attr後面的是許可權,屬主,屬組

3. 生成rpm檔案測試

  1. rpmbuild -ba tengine.spec 

4. 安裝測試 

到此RPM包製作完畢,你可以根據你的需求製作RPM包吧。

四.RPM包簽名

1.生成GPG簽名金鑰,我用的是root使用者

  1. gpg --gen-key 
  2. Your selection?1<Enter>  ##預設即可
  3. What keysize do you want? (2048) 1024<Enter>  ##金鑰長度
  4. Key is valid for? (0) 1y<Enter>  ##有效期
  5. Is this correct? (y/N) y<Enter>  ##確認
  6. Real name: LaoGuang<Enter>  ##金鑰名稱
  7. Email address: [email protected]<Enter>  ##郵件
  8. Comment: GPG-RPM-KEY<Enter>  ##備註
  9. Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O<ENTER
  10. Enter passphrase  OK <Enter>  ##使用空密碼,也可以輸入                              
  11. <Take this one anyway<Enter
  12. <Take this one anyway<Enter

有時可能因為隨機數不夠導致卡在那裡,這時候你就yum 安裝幾個包組,馬上就夠了。

2.檢視成生的金鑰

  1. [[email protected] dev]# gpg --list-keys 
  2. /root/.gnupg/pubring.gpg 
  3. ------------------------ 
  4. pub   1024R/49C99488 2012-11-28 [expires: 2013-11-28] 
  5. uid                  LaoGuang (GPG-RPM-KEY) <[email protected]
  6. sub   1024R/69BA199D 2012-11-28 [expires: 2013-11-28] 

3.匯出公鑰以供大家使用驗證

  1. gpg --export -a "LaoGuang" > RPM-GPG-KEY-LaoGuang 

4.編緝 .rpmmacros說明我們用哪一個金鑰加密,我們用root加密的那就在/root下編輯

  1. vi ~/.rpmmacros 
  2. %_gpg_name LaoGuang 

5.為rpm包加簽名

  1.  rpm --addsign tengine-1.4.2-1.el6.x86_64.rpm  
  2. Enter pass phrase:   ##輸入金鑰
  3. Pass phrase is good. 
  4. tengine-1.4.2-1.el6.x86_64.rpm: 

到此簽名新增成功,下面來驗證

6.講剛才匯出的公鑰匯入rpm中

  1. rpm --import RPM-GPG-KEY-LaoGuang 

7.驗證

  1. rpm --checksig tengine-1.4.2-1.el6.x86_64.rpm  
  2. tengine-1.4.2-1.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK 

到此整個過程完畢,你也試試吧

Group:

軟體包所屬類別,具體類別有:

Amusements/Games (娛樂/遊戲)

Amusements/Graphics(娛樂/圖形)

Applications/Archiving (應用/文件)

Applications/Communications(應用/通訊)

Applications/Databases (應用/資料庫

Applications/Editors (應用/編輯器)

Applications/Emulators (應用/模擬器)

Applications/Engineering (應用/工程)

Applications/File (應用/檔案)

Applications/Internet (應用/因特網)

Applications/Multimedia(應用/多媒體)

Applications/Productivity (應用/產品)

Applications/Publishing(應用/印刷)

Applications/System(應用/系統)

Applications/Text (應用/文字)

Development/Debuggers (開發/偵錯程式)

Development/Languages (開發/語言)

Development/Libraries (開發/函式庫)

Development/System (開發/系統)

相關推薦

rpm打包rpmbuild SPEC檔案深度說明

關鍵字 spec指令碼包括很多關鍵字,主要有:引用Name: 軟體包的名稱,後面可使用%{name}的方式引用Summary: 軟體包的內容概要Version: 軟體的實際版本號,例如:1.0.1等,後面可使用%{version}引用Release: 釋出序列號,例如:1li

RPMrpmbuild SPEC檔案

引用 1、並不是所有的軟體都提供.rpm方式的。  這是最常見的原因。負責任的開發者應提供rpm方式的二進位制軟體包,以便使用者選擇使用。但也很常見就是軟體作者只是釋出了原始碼,最後一部分的編譯和安裝需要使用者自行解決。我不想深究對錯問題,反正知道有這樣的情況就可以了;2、自行打包一些檔案或自己開發了一

Maven打包把配置檔案引用打到外部

在SIT 環境測試的時候,因為伺服器環境和本地環境可能不同,會造成不少問題,所以會進行多次打包。而且配置檔案不同,所以每次打包都要修改配置檔案,十分麻煩。 maven打包可以把配置檔案引用打成外部的,這樣就可以把sit環境的配置丟到伺服器,然後每次打包動態

Spring boot 專案分環境 Maven 打包動態配置檔案動態配置專案

Spring boot Maven 專案打包 使用Maven 實現多環境 test dev prod 打包 專案的結構 在下圖中可用看出,我們打包時各個環境需要分開,採用 application-環境.yml 的方式命名 環境配置開始 首先我們需要在app

subversion(版本控制)RPM打包

subversionrpm打包##########################################################################################subversion:簡介:subversion是一個自由/開源的版本控制系統-->subve

RPM軟件打包SVN

手動 import stat listen select fail conflict lis show all RPM軟件打包 步驟:1.準備源碼軟件2.安裝rpm-build3.編寫編輯配置文件4.編譯RPM包 步驟一:安裝rpm-build軟件1)安裝rpm-bui

rpmbuild spec 打包jar變小了、設置禁止壓縮二進制文件Disable Binary stripping in rpmbuild

sin out nag html lib note data- any nil Disable Binary stripping in rpmbuild 摘自:http://livecipher.blogspot.com/2012/06/disable-binary

關於springboot打包然後掃描不到mapper檔案

springboot專案打成jar包後,一直提示: nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ny.dao.UserInfoDa

vuecli開發專案檔案打包appjs/vendorjs檔案過大

專案上線後,瀏覽器第一次載入會特別特別慢,network中看到vendorjs檔案1.9M,不慢才怪。 echarts按需引入後,也有1.1M左右,由於對vue腳手架理解不深,自己扒了大量的文件,又測 試了很多次,才測試成功,暫時簡單記錄下。 npm run build --report 可

Spring Boot 打包分離依賴jar配置檔案

maven-jar-plugin,負責將應用程式打包成可執行的jar檔案  maven-assembly-plugin,負責將整個專案按照自定義的目錄結構打成最終的壓縮包,方便實際部署  需求1,將依賴的jar提取到可執行的jar檔案之外,我們使用maven-jar-p

tar---打包解壓縮linux的檔案和目錄

tar命令可以為linux的檔案和目錄建立檔案。利用tar,可以為某一特定檔案建立檔案(備份檔案),也可以在檔案中改變檔案,或者向檔案中加入新的檔案。tar最初被用來在磁帶上建立檔案,現在,使用者可以在任何裝置上建立檔案。利用tar命令,可以把一大堆的檔案和目錄全部打包成一個檔案,這對於備份檔案或將幾個檔案組

pyinstaller 打包生成的exe檔案在其他電腦上報錯

  解決方法: 1、第一種情況,在打包的時候不要加引數-w,看一下執行exe檔案後出現的報錯再看下一步的行動 2、應該是需要裝一個VC 2015 x64(下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=526

WEB環境搭建RPM打包、壓力測試

“` dhcp rpm打包 LAMP LNMP環境的搭建 netstat 與 ss :檢視連線狀態的 tcp狀態統計 ss -ant|awk ‘{A[$1]++}END{for(a in A)print A[a],a}

使用pyinstaller打包多個py檔案遇到的no module ...exe檔案一閃而過自定義模組打包等問題

1.跳過pyinstaller的安裝,自行谷歌 2. 用cmd cd到你想要打包的py檔案所在的資料夾下面,這裡我的資料夾是ceshi;我需要打包的檔案為main.py、a1.py、a2.py 3.執行命令pyi-makespec main.py,這裡將會根據你的mai

如何使用Eclipse將Java工程打包成Jar包並用bat檔案啟動Jar包

作者:翁鬆秀 如何使用Eclipse將Java工程打包成Jar包,並用bat檔案啟動Jar包 如何使用Eclipse將Java工程打包成Jar包,並用bat檔案啟動Jar包 一、用Eclipse將Java工程打包成J

springBoot專案中如何根據不同的環境打包不同的配置檔案

版權宣告:轉發請註明,謝謝配合 https://blog.csdn.net/qq_31289187/article/details/85116371 1、建立springboot專案,然後建立不同的resource 2、application.properties加上一個標誌,

使用rpmbuild 進行rpm 打包

1.安裝打包工具 Redhat 架構的 Linux 系統是通過 rpmbuild 命令來製作 RPM 安裝包,而 Fedora14 預設情況下 是沒有安裝 rpmbuild 命令,只好手動安裝。 進入 Fedora 14 中,開啟終端,輸入以下命令: $ su -#

Java SE程式打包成jar包或exe程式時讀取配置檔案的處理

該Java SE程式打包成JAR包或exe程式的時候,配置檔案不能放在裡面;因為會時不時的修改配置檔案裡面的內容,所以必須放在外邊,以備隨時更改! Main main = new Main();

java 從MyEclipse打包做成exe可執行檔案再到做成安裝檔案詳解

           做了一個java程式,先展示給別人看或者投入使用,java的執行是建立在JDK的基礎之上的,別人沒java環境,自然不能執行,那麼問題來呢,怎麼才能讓自己的程式在沒有環境的機器上

SPEC指令碼及RPM打包

1. Makefile示例 all: dist .PHONY: clean clean: distclean dep: dist: distclean dep sh package/package.sh rpmbuild -bb package/confma