linux RPM manager

来源:https://www.cnblogs.com/dufeixiang/archive/2019/04/03/10649152.html
-Advertisement-
Play Games

rpmbuild├── BUILD #當我們rpmbuild -ba 構建rpm時會自動在這個目錄下進行編譯├── BUILDROOT #會當成臨時根,會將編譯好的軟體包生成在這個目錄下├── RPMS #編譯好的rpm包會存放在這個文件夾├── SOURCES #放源碼包,一般為tar.gz格式├ ...


RPM manage:
rpm2cpio package_name | cpio -id #將一個rpm包解壓至當前目錄
rpm -qi package_name #查看一個已安裝的rpm包信息
rpm -qpi package_name #查看一個文件系統上的制定rpm包信息
rpm -Uvh package_name #升級一個rpm包
rpm -e package_name #卸載rpm包 -ivh 顯示詳細信息 --nodpes 忽略依賴
rpm -i package_name #安裝rpm包 -ivh 顯示詳細信息
rpm -qd package_name #查看rpm包生成的文檔路徑
rpm -qc package_name #查看rpm包生成的配置文件路徑
rpm -q --scripts package_name #查看安裝rpm包前運行的腳本

RPM Build:

構建rpm需要創建指定的文件夾:
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
可以手動創建,也可以在任何目錄下直接運行rpmbuild test.spec
error: failed to stat /root/test.spec: 沒有那個文件或目錄
雖然會報錯,但是這時已經自動在當前目錄下生成了rpmbuild目錄結構了:

rpmbuild
├── BUILD                 #當我們rpmbuild -ba 構建rpm時會自動在這個目錄下進行編譯
├── BUILDROOT       #會當成臨時根,會將編譯好的軟體包生成在這個目錄下
├── RPMS                 #編譯好的rpm包會存放在這個文件夾
├── SOURCES          #放源碼包,一般為tar.gz格式
├── SPECS               #.sepc 文件
└── SRPMS               #存放src.rpm包【rpm格式的源碼包,可以在不同平臺上進行build】

rpmbuild  --showrc                #顯示系統定義的macros
rpmbuild --showrc | grep _topdir #顯示系統預設的rpmbuild工作路徑
NOTE: 在macros中 ‘__’表示命令別名(不同的os命令路徑可能不一樣,所以需要使用命令別名),'_'表示環境變數。

SPEC FILE:

macros:

#開頭為註釋,註釋中不能使用%等巨集關鍵字,如要使用#,可以寫成##
%define nginx_user nginx    #define macros
%{nginx_user}                      #use macro

spec文件必須欄位:
name:
  不能包含“-”
version:
  不能包含“-”
release:

  發行號

group:
所屬組,/usr/share/doc/rpm-version/GROUPS 中任意一個

定義能力:
Provides: webserver
#如果定義了能力,別人如果安裝軟體需要依賴的話可以依賴我們自己定義的能力,如果沒有定義預設就是軟體包的名字。

所有步驟:

1.準備階段:

%prep:
1.切換工作目錄,解壓軟體包
2.設置許可權,設置環境變數等
#可以用%setup 控制預設prep的動作

2.編譯階段:

%build:
#如果不需要編譯可以留空。

3.安裝階段:

%install:
#安裝

4.清理階段:

%clean
#刪除build中的文件

%file
#包含哪些文件,如果未完全包含編譯生成的所有文件,那麼構建rpm包時會報錯

  %doc file                  #後面文件類型為文檔

       %docdir dir_name    #目錄下所有內容都為文檔

       %config(noreplace)  #內容為配置文件(noreplace)

       %defattr                    #定義文件預設許可權

       %attr(mode,user,group)  #定義文件許可權,如果不定義則使用定義的預設許可權

          eg:  %attr(-,root,-)

                           %defattr(-,root,root,0755)

額外選項:

%pre
#安裝前運行的腳本
%post
#安裝後運行的腳本
%preun
#卸載前運行的腳本
%postun
#卸載後運行的腳本


子包:將一個程式拆分為多個子包

如:將mysql拆分為主包和開發包:

mysql-server.rpm

mysql-devel.rpm

spec file 實例:

 

Name:  nginx
Version: 1.10.2    
Release:    1%{?dist}
Summary:  nginx web server     

Group:    Applications/Internet
License: fuck
URL:    http://www.feixiangwl.cn    
Source0:    nginx-1.10.2.tar.gz
Source1:        readme
BuildRoot: %_topdir/BUILDROOT
#BuildRequires:    
#Requires:    

%description 
this is my first rpm

%package readme          #子包(將readme單獨作為一個包)
Summary: readme files
Group:  Applications/Internet
%description readme
this is my first rpm

%prep
%setup -q


%build
./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx --conf-path=/etc/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log  --without-http_rewrite_module --without-http_gzip_module
make


%install
make install DESTDIR=%{buildroot}
%{__install} -p -D -m 0755 %{SOURCE1} %{buildroot}/readme

%files
%defattr(-,root,root,0755)
/usr
/etc
/var

%files readme       #(定義上面的子包包含哪些文件)
%defattr(-,root,root,0755)
/readme

%changelog

 

 

簽名:防止程式傳播過程中被別人篡改

1.生成密鑰對:

gpg --gen-key

NOTE:必須正確輸入REAL NAME(真實姓名)選項,後期此項作為KEY_NAME使用。

2.查看系統已有的GPG KEY:

gpg --list-key

3.修改rpm巨集使用我們剛纔生成的密鑰對:

# echo %_signature gpg >> ~/.rpmmacros # echo "%_gpg_name <key_name>" >> ~/.rpmmacros   4.對已經存在的rpm包簽名: rpm --addsign <rpm_name>   5.導出公鑰,以備後期其他客戶端對包簽名進行驗證: gpg --export -a "<key_name>" > RPM-GPG-KEY-ECDATA

 

6. 導入公鑰(要驗證rpm包的機器上導入):

rpm --import RPM-GPG-KEY-ECDATA   #RPM-GPG-KEY-ECDATA是公鑰名稱

 

7.查看已導入的公鑰:

rpm -q gpg-pubkey-*

 

8.校驗rpm包簽名:

rpm -K <RPM_NAME>

NOTE:但是此時yum安裝還不行,如果想要yum安裝,必須在repo中定義:

enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6        file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ECDATA         #公鑰的路徑  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用Expand命令行可以在電腦沒有安裝Windows操作系統的情況下應用批處理文件和腳本: 雖然有多個基於Windows的工具可以壓縮和解壓縮文件(包括WinZip和WinRAR),但是必須有一個可以工作的Windows操作系統才能使用它們。 Expand工具用來壓縮的Wndows CAB文件中 ...
  • 我在使用SDL2的時候,遇到undefined reference to `SDL_Init'的問題,只要使用SDL2相關的函數,就會報函數未定義。後來百度到一篇文章https://blog.csdn.net/hank12580/article/details/45949995,經過測試可以使用,原 ...
  • 我在使用SDL2的時候遇到始終找不到頭文件的問題,到處百度然後我嘗試使用#include<SDL2/SDL.h>編譯通過了,那麼我很顯然我之前設置的環境變數應該是沒有生效的,後面在返回來研究下為啥沒有生效,linux的基礎知識太薄弱了,應該好好補習一下。 ...
  • 今天打算學習littlev GUI,使用Ubuntu來實現模擬,然後在安裝SDL2的時候,始終因為依賴關係導致安裝失敗,我嘗試手動去安裝那些有依賴關係的包發現根本不可行,然後我百度上也沒有找到合適的法子,但是看有的網友說是因為源的問題,我思考了下覺得這個說法有一定道理,然後我嘗試切換源,我測試了16 ...
  • 1. 檢查系統自帶的Mysql,並卸載自帶的版本 2. 卸載系統自帶的mysql及其依賴 3. 給CentOS添加rpm源,並且選擇較新的源 1)下載rpm包 2)安裝本地mysql源 3)驗證是否安裝成功 4)修改預設版本為5.7 註:如下是截取的老徐之前文章 -》原文 http://istest ...
  • HTTP/HTTPS抓包工具--Fiddler Fiddler[ˈfɪdlə(r)] 1. HTTP代理神器Fiddler Fiddler是一款強大Web調試工具,它能記錄所有客戶端和伺服器的HTTP請求。 Fiddler啟動的時候,預設IE的代理設為了127.0.0.1:8888,而其他瀏覽器是需 ...
  • 參考資料: RAID data striping spanned volume 從raid0到raid7,raid陣列各級別介紹 本文所使用的圖片來源於互聯網,若有侵權,煩請聯繫,謝謝。 簡介 RAID出現的目的是為了數據的冗餘,或者性能的提升,或者兩者兼顧。早期想實現這樣的功能,可能需要購買一些基 ...
  • 第一階段 start.S 首先我們可以在u boot.lds中看到 ,即指定了入口 ,`_start start.S`的最開始; 1. reset 在 中的 normal_start_flow: / set stack for C code / ldr x0, =(CONFIG_SYS_INIT_S ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...