# 用於安裝製作rpm包的檔案
yum install rpm-build rpmdevtools
rpmdev-setuptree
# 預設將使用使用者家目錄建立對應檔案
rpmbuild/
|-- build
|-- rpms
|-- sources
|-- specs
|-- srpms
# 若要修改預設建立位置,修改如下即可
[root@centos8 ~]
# cat ~/.rpmmacros
%_topdir %(echo $home
)/rpmbuild
%__arch_install_post \
["%"=
"noarch"
]|| qa_check_rpaths=1 ; \
case
"$"in
[1yy]*) /usr/lib/rpm/check-rpaths ;
; esac \
/usr/lib/rpm/check-buildroot
其實放置在任何可以訪問的目錄都可以,只不過我們為了方便,而且不需要編譯
你希望最終安裝的時候希望自己的軟體在什麼位置,這個就放在什麼位置,本例子中,希望python368目錄放置在/opt下面
rpmbuild
|-- build
|-- rpms
|-- sources
|`-- opt|`
-- python368
||-- bin||
`-- python368.sh|`
-- lib
| `-- libs.info
|-- specs
|-- srpms
對我們來說最重要的就是那個buildroot目錄了
**使用rpmbuild --showrc
**可以檢視所有的預設巨集定義哦
cd spec # 但其實放置在任何位置都可以的,只不過為了規範點,但實際上我們這樣使用自定義目錄打包本身就是不規範,適合內部軟體打包使用,不適合發布此類rpm包,如要發布,請遵循linux本身的目錄規則進行打包
vim test.spec
name:test
version:1.0
release:0%
summary: test
group:test
license:gpl
autoreqprov: no
buildroot:%(mktemp -ud %/%-%-%-******)
%description -l zh_cn
"the tools for test"
%prep
echo
"do not"
%install
cd %
# ~/rpmbuild/source
cp -ar * %/ # 這個就是假根了 ~、rpmbuild/buildroot
%files
/opt/python368 # 要打包的內容,此處理解為將假根下面的所有檔案打包,因為我們的目錄本身不太符合規範,不然檢查的時候過不去的
%postun
rm -rf /opt/python368
可能你會有一問為什麼沒有configure和build的過程,因為我們不需要呀!!!
rpmbuild -bb test.spec
...wrote: /root/rpmbuild/rpms/x86_64/test-1.0-0.el8.x86_64.rpm
executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.jmrmdt
+ umask 022
+ cd /root/rpmbuild/build
+ /usr/bin/rm -rf /root/rpmbuild/buildroot/test-1.0-0.el8.x86_64
+ exit 0
# 一般這樣打包成功了
讓我們再看看此時的目錄結構
[root@centos8 ~]
# tree rpmbuild
rpmbuild
|-- build
|`-- opt|`
-- python368
||-- bin||
`-- python368.sh|`
-- lib
|`-- libs.info
|-- buildroot
|-- rpms|`
-- x86_64
|`-- test-1.0-0.el8.x86_64.rpm
|-- sources|`
-- opt
|`-- python368
||-- bin||
`-- python368.sh
|`-- lib|`
-- libs.info
|-- specs
|`-- test.spec
`-- srpms
15 directories, 6 files
讓我們檢視下rpm包的內容
[root@centos8 ~]
# rpm -qpl rpmbuild/rpms/x86_64/test-1.0-0.el8.x86_64.rpm
/opt
/opt/python368
/opt/python368/bin
/opt/python368/bin/python368.sh
/opt/python368/lib
/opt/python368/lib/libs.info
***.spec
#自定義巨集,相當於linux中"key-value"變數形式
%define name test #---> 名稱
%define version 1.2.2 #---> 版本
#定義軟體包資訊,即:"rpm -qi name.rpm " 檢視到的內容
name: %
#---> 引用巨集
version: %
#---> 引用巨集
release: 1%
#---> 引用巨集(自帶巨集)
summary: ..
....
....
....
....
....
....
....
....
..... #---> 一些描述資訊
license: gplv2 #---> 授權協議
url: web位址
buildroot: %/buildroot #---> 指定生產車間(非常重要,因在生成rpm過程中執行make install時會把軟體安裝到此路徑,打包時同樣依此目錄為「根目錄」進行操作)
source0: %-%.tar.gz #---> 指定原始碼編譯的檔案,預設路徑:%/sources
source1: 支援多個
buildrequires: gcc,make,automake,binutils #---> 軟體依賴資訊
requires: bash
>= 2.0 #---> 定義軟體依賴資訊,該rpm包所依賴的軟體包名稱,可用》=或<=表示大或小於特定版本
%description
this is %
.....just a test rpm suite..
....
....
...
#安裝前的準備工作,此處可寫入執行指令碼
%pre
useradd % -s /sbin/nologin
#安裝前的準備:此段預設將source目錄內的原始碼包在build目錄解壓為%-%格式的目錄
%prep
%setup -q -n %-%
#---> 引數:-c 解壓縮之前先產生目錄,-n newdir 將軟體包解壓在newdir目錄
#定義config動作
%build
bash script
#定義執行make install時的動作
%install
bash script
#賦予檔案的預設許可權及設定需在rpm包中保留的檔案
%files
%doc
%defattr(-,root,root,-)
#---> 指定包裝檔案屬性,分別是(mode,owner,group),- 表示預設值,文字檔案是0644,可執行檔案0755
%attr(0755,root,root)
#---> 針對單一檔案設定許可權
#製作完成後的清理工作
%clean
rm -rf %
#安裝後的執行工作,此處可寫入執行指令碼
%post
bash script
# 解除安裝前執行的指令碼
%preun
# 解除安裝完成後執行的指令碼
%postun
#變更日誌
%changelog
spec檔案說明
spec說明
任意檔案打包進apk
預設情況android工程下的assets目錄下的所有檔案都會原封不動的打包進apk中,但apk安裝後這些檔案卻不會解包出來。只能使用inputstream和fileoutputstream將這些檔案寫入到需要的位置。inputstream is getresources getassets ope...
PhpMyadmin任意檔案讀取漏洞及修復方案
簡要描述 phpmyadmin實現中錯誤的使用了 xml load string函式用於xml解析,但是該函式中預設並沒有處理好外部實體的安全性,導致使用者可以借助xml檔案讀取和訪問應用有許可權訪問的系統和網路資源 詳細說明 libraries import xml.php中 unset data...
通達OA未授權任意檔案上傳和任意檔案包含漏洞復現
建立乙個上傳的頁面 開啟後,上傳乙個jpg,內容如下 儲存為jpg phpwsh new com wscript.shell or die create wscript.shell failed exec phpwsh exec cmd.exe c post cmd stdout exec stdo...