構建本地yum源之rpmbuild

来源:http://www.cnblogs.com/p4w9110/archive/2016/01/05/5101818.html
-Advertisement-
Play Games

組內準備搭建內部yum源,在這之前需要規範軟體的安裝目錄,並把現有的應用打包。目前接觸兩種rpm打包工具,rpmbuild和fpm。-rpmbuild rpmbuild關鍵是spec文件編寫。 環境搭建yum -y install rpm-build rpmdevtoolsuseradd rpm;....


組內準備搭建內部yum源,在這之前需要規範軟體的安裝目錄,並把現有的應用打包。

 

目前接觸兩種rpm打包工具,rpmbuild和fpm。

- rpmbuild

    rpmbuild關鍵是spec文件編寫。

    環境搭建

    yum -y install rpm-build rpmdevtools

    useradd rpm; su rpm

    註: rpm打包需要特定目錄下,在近期版本下rpmbuild可以在非root賬號家目錄下創建打包目錄:

    rpmdev-setuptree

    [rpm@vm-1-lz rpmbuild]$ ll

    total 20

    drwxrwxr-x. 2 rpm rpm 4096 Dec 22 14:46 BUILD

    drwxrwxr-x. 2 rpm rpm 4096 Dec 22 14:46 RPMS

    drwxrwxr-x. 2 rpm rpm 4096 Dec 22 15:06 SOURCES

    drwxrwxr-x. 2 rpm rpm 4096 Dec 22 16:07 SPECS

    drwxrwxr-x. 2 rpm rpm 4096 Dec 22 14:46 SRPMS

    [rpm@vm-1-lz rpmbuild]$ 

    註:這裡是/home/rpm/rpmbuild, 這個預設目錄可以修改,可以修改巨集定義:

    /usr/lib/rpm/macros: 

       _topdir                %{getenv:HOME}/rpmbuild

    然後在rpmbuild/SPECS 目錄下創建spec文件:

    cd ~/rpmbuild/SPECS

    rpmdev-newspec -o example.spec

    

    SPEC文件

     打包過程是

     1. %prep 解壓source部分定義的壓縮包到 %build目錄下

     註:Source需要是tar格式壓縮文件,這樣setup才能調用 (source 跟setup可以多條記錄,並依序對應)

     2  %build 可以調用%configure巨集變數或是直接調用configure命令直接配置

     3  %install 安裝文件到%buildroot下 (rpmbuild/BUILDROOT), 在這部分,需要確保目錄已經存在不然會報錯,比如拷貝配置文件到/etc/下,需要建立%buildroot/etc 目錄

     註:%install 部分是用絕對路徑的,所以最好引用%buildroot

     4 %file 部分定義那些文件將被打包進rpm包里

     註:%file部分是用相對路徑,我們可以用巨集變數 比如%_prefix 代表/usr  其絕對路徑就是%buildroot/usr

     參考 http://fedoraproject.org/wiki/Packaging:RPMMacros

 

- fpm 打包

    這是一個開源的項目 https://github.com/jordansissel/fpm 

    環境搭建:

    yum -y ruby ruby-devel rubygems rpm-build

    gem install fpm

    註: 這裡有個坑。如果正常按照gem去安裝 我們是沒辦法調用 fpm成功的,因為 cabin的版本有問題:

    [root@vm-1-lz RPMS]# fpm

    /usr/lib/ruby/gems/1.8/gems/cabin-0.8.0/lib/cabin/mixins/logger.rb:12:in `included': undefined method               `options' for #<Cabin::Subscriber:0x7fad75e31b90> (NoMethodError)

     from /usr/lib/ruby/gems/1.8/gems/cabin-0.8.0/lib/cabin/channel.rb:105:in `call'

    ....

    因此, 卸載當前cabin版本:

    gem uninstall cabin

    ....

    gem install cabin -v 0.7.2

    用前一個版本的cabin才能正確啟動fpm

 

    構建rpm包

    把之前編譯好的nginx打包:

    nginx 目錄: /usr/local/nginx

    fpm命令:

    fpm -e -s dir -t rpm -n nginx -v 1.8.0 -C /usr/local/nginx --prefix=/opt/nginx

    註: -e 可以讓我們看到具體的spec文件,  如果沒問題,保存退出就能在當前目錄創建一個rpm包

    

    但是fpm不能友好的按照規範路徑打包

 

 

- SPEC例子

Name:           tengine
Version:        1.5.2
Release:        1%{?dist} 
Summary:        tengine-1.5.2

Group:          Application/System 
License:        GPL 
URL:            http://tengine.taobao.org/
Source0:        tengine-1.5.2.tar.gz
Source1:        LuaJIT-2.0.4.tar.gz
Source2:        pcre-8.34.tar.gz
Source3:      openssl-1.0.2e.tar.gz
Source4:      zlib-1.2.8.tar.gz
Source5:      ngx_devel_kit-0.2.18.tar.gz
Source6:       jemalloc-3.4.0.tar.bz2
Source7:      nginx-bb-1.8.0.tar.gz

Requires: zlib,pcre,openssl,LuaJIT 

%description
tengine-1.5.2

%prep
%setup -b 0
%setup -b 1
%setup -b 2
%setup -b 3
%setup -b 4
%setup -b 5
%setup -b 6
%setup -b 7

%build 
CFLAGS="${CFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic}" ; export CFLAGS ; 
CXXFLAGS="${CXXFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic}" ; export CXXFLAGS ; 
FFLAGS="${FFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I/usr/lib64/gfortran/modules}" ; export FFLAGS ; 
./configure \
  --with-http_ssl_module \
  --prefix=/opt/nginx \
  --error-log-path=/opt/nginx/logs/ \
  --http-log-path=/opt/nginx/logs/ \
  --pid-path=/opt/nginx/run/ \
  --lock-path=/opt/nginx/lock/ \
  --user=www \
  --group=www \
  --with-http_stub_status_module \
  --with-http_gzip_static_module  \
  --with-http_lua_module  \
  --with-luajit-inc=/usr/local/include/luajit-2.0 \
  --with-luajit-lib=/usr/local/lib \
  --with-pcre=%{_builddir}/pcre-8.34 \
  --with-openssl=%{_builddir}/openssl-1.0.2e \
  --with-zlib=%{_builddir}/zlib-1.2.8 \
  --with-http_concat_module  \
  --with-http_sysguard_module \
  --with-http_realip_module \
  --without-syslog \
  --with-jemalloc  \
  --add-module=%{_builddir}/ngx_devel_kit-0.2.18 

make %{?_smp_mflags} 

%install 
rm -rf $RPM_BUILD_ROOT 

make install DESTDIR=$RPM_BUILD_ROOT

mv %{buildroot}/opt/nginx/conf %{buildroot}/opt/nginx/conf.default
install -d %{buildroot}/opt/nginx/conf
cp -r %{_builddir}/nginx-bb-1.8.0/conf/*  %{buildroot}/opt/nginx/conf

%clean 
rm -rf $RPM_BUILD_ROOT 

%files 
%defattr(-,root,root,-) 
%doc 
/opt/nginx/*

%changelog

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當HttpContext對象創建之後,HttpRuntime將隨後創建一個用於處理請求的對象,這個對象的類型為HttpApplication. 在ASP.NET內部,HttpRuntime管理一個定義在System.Web命名空間下的HttpApplicationFactory類的實例...
  • 在mac上截屏的幾種方式
  • 1、圖像的延遲一幀的問題,主要原因如代碼中所說,只有隊列多餘兩幀的時候才會出隊一幀。該問題對於連續的圖像幀基本無影響,只是對於非連續的情況下,進來的第一幀會延後,先出來的是上一次圖像序列中最後一幀。而當次圖像序列的最後一幀將會被刷到隊列中。 如果將其中的2改寫為1,則會出現圖像上下分層現象,上層是....
  • - check-rpaths的問題 今天在編譯varnish的時候,遇到幾個問題,其中一個就是出現如下錯誤:...+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot************************************....
  • 安裝參見: https://github.com/oetiker/SmokePing/blob/master/doc/smokeping_install.pod 1 Smokeping 2 3 *** General *** 4 5 owner = Ctry 6 contact...
  • 發現伺服器的cpu使用率特別高排查思路:-使用top或者mpstat查看cpu的使用情況# mpstat -P ALL 2 1Linux 2.6.32-358.el6.x86_64 (linux—host) 01/05/2016 _x86_64_ (24 CPU)04:41:13 PM CPU...
  • USB 設備驅動:一、USB 描述符:(存在於USB 的E2PROM裡面)1、 設備描述符:struct usb_device_descriptor2、 配置描述符:struct usb_config_descriptor3、 介面描述符:struct usb_interface_descripto...
  • 英文原文:What really happens when you navigate to a URL,編譯:寒冬星空作為一個軟體開發者,你一定會對網路應用如何工作有一個完整的層次化的認知,同樣這裡也包括這些應用所用到的技術:像瀏覽器,HTTP,HTML,網路伺服器,需求處理等等。本文將更深入的研究...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...