YUM倉庫搭建

1.1 yum介紹

YUM主要用於自動安裝、升級rpm軟件包,它能自動查找並解決rpm包之間的依賴關係。要成功的使用YUM工具安裝更新軟件或系統,就須要有一個包含各類rpm軟件包的repository(軟件倉庫),這個軟件倉庫咱們習慣稱爲yum源。網絡上有大量的yum源,但因爲受到網絡環境的限制,致使軟件安裝耗時過長甚至失敗。特別是當有大量服務器大量軟件包須要安裝時,緩慢的進度條使人難以忍受。所以咱們在優化系統時,都會更換國內的源。相比較而言,本地YUM源服務器最大優勢是局域網的快速網絡鏈接和穩定性。有了局域網中的YUM源服務器,即使在Internet鏈接中斷的狀況下,也不會影響其餘YUM客戶端的軟件安裝和升級。php

1.2 rpm 介紹

1.2.1 概述

RPM全稱是 Red Hat Package Manager(Red Hat包管理器)。幾乎全部的 Linux 發行版本都使用這種形式的軟件包管理安裝、更新和卸載軟件。html

RPM是一個開放的軟件包管理系統。它工做於Red Hat Linux以及其它Linux和UNIX 系統,可被任何人使用。redhat軟件公司鼓勵其它廠商來了解RPM並在本身的產品中使用它。RPM的發佈基於GPL協議。對於最終用戶來講,使用RPM所提供的功能來維護系統是比較容易和輕鬆的。安裝、卸載和升級RPM軟件包只需一條命令就能夠搞定。RPM維護了一個全部已安裝的軟件包和文件的數據庫,可讓用戶進行查詢和驗證工做。在軟件包升級過程當中,RPM會對配置文件進行特別處理,絕對不會丟失以往的定製信息。對於程序員RPM可讓咱們連同軟件的源代碼打包成源代碼和二進制軟件包供最終用戶使用。python

RPM擁有功能強大的查詢選項。咱們能夠搜索數據庫來查詢軟件包或文件。也能夠查出某個文件屬於哪一個軟件包或出自哪兒。RPM軟件包中的文件是以壓縮格式存放的,擁有一個定製的二進制頭文件,其中包含有關包和內容的信息,可讓咱們對單個軟件包的查詢簡便又快速。mysql

RPM另外一個強大的功能是進行軟件包的驗證。若是咱們擔憂誤刪了某個軟件包中的某個文件,咱們就能夠對它進行驗證。任何非正常現象將會被通知。若是須要的話還能夠從新安裝該軟件包。在從新安裝過程當中,全部被修改過的配置文件將被保留。linux

RPM設計目標之一就是要保持軟件包的原始特徵, 就象該軟件的原始發佈者發佈軟件時那樣。經過使用RPM咱們能夠擁有最初的軟件和最新的補丁程序,還有詳細的軟件構建信息。nginx

歸納的說:RPM有五種基本的操做功能(不包括建立軟件包):安裝、卸載、升級、查詢、和驗證。關於rpm命令的使用咱們能夠用如下命令:程序員

[root@hostname root]rpm -help

1.2.2 RPM工具功能

1) 安裝web

rpm -i ( or --install) options file1.rpm ... fileN.rpm 經過rpm -ivh能夠把rpm軟件包安裝到系統中,固然也可使用不一樣的參數選項,筆者建議使用-ivh ,使用該選項能夠解決大部分rpm軟件包的安裝,至於詳細的參數說明可用查看rpm的man 文檔。

2 )刪除sql

rpm -e ( or --erase) options pkg1 ... pkgN 若是某個軟件包你不再想使用了,那就用以上這個命令完全的把你指定的rpm軟件包清除掉把。

3 )升級數據庫

rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm 因爲開源軟件更新速度快,用戶固然要使用最新版本的軟件包,此時最合適的就是rpm升級功能,固然最理想的參數選項就是-Uvh。

4 )查詢

rpm -q ( or --query) options 實際上咱們一般使用rpm工具最多的功能仍是它的查詢功能,好比查看軟件包的版本、依賴關係等軟件包的詳細說明都要用到。最有用的參數選項是-qpi。

5 )校驗已安裝的軟件包

rpm -V ( or --verify, or -y) options 通常咱們可用經過該命令來驗證已安裝軟件包,根據筆者的經驗該命令通常沒什麼用途,只作一個瞭解就ok了。

參考:https://www.ibm.com/developerworks/cn/linux/l-rpm/

1.3 FPM打包工具

1.3.1 FPM功能

簡單說就是將一種類型的包轉換成另外一種類型。

1.3.2 . 支持的源類型包

dir         #將目錄打包成所須要的類型,能夠用於源碼編譯安裝的軟件包
rpm        #對rpm進行轉換
gem        #對rubygem包進行轉換
python      #將python模塊打包成相應的類型

1.3.3 支持的目標類型包

rpm         #轉換爲rpm包
deb         #轉換爲deb包
solaris       #轉換爲solaris包
puppet      #轉換爲puppet模塊

1.4 服務端配置

1.4.1 FPM安裝

fpm是ruby寫的,所以系統環境須要ruby,且ruby版本號大於1.8.5。

# 安裝ruby模塊
yum -y install ruby rubygems ruby-devel

# 查看當前使用的rubygems倉庫
gem sources list

# 添加淘寶的Rubygems倉庫,外國的源慢,移除原生的Ruby倉庫
gem sources -a http://mirrors.aliyun.com/rubygems/ --remove http://rubygems.org/

# 安裝fpm,gem從rubygem倉庫安裝軟件相似yum從yum倉庫安裝軟件。首先安裝低版本的json,高版本的json須要ruby2.0以上,而後安裝低版本的fpm,夠用。
gem install json -v 1.8.3
gem install fpm -v 1.3.3
# 上面的2步安裝僅適合CentOS6系統,CentOS7系統一步搞定,即gem install fpm
[root@m01 tools]# gem install fpm
Fetching: cabin-0.9.0.gem (100%)
Successfully installed cabin-0.9.0
Fetching: backports-3.11.1.gem (100%)
Successfully installed backports-3.11.1
Fetching: arr-pm-0.0.10.gem (100%)
Successfully installed arr-pm-0.0.10
Fetching: clamp-1.0.1.gem (100%)
Successfully installed clamp-1.0.1
Fetching: ffi-1.9.21.gem (100%)
Building native extensions.  This could take a while...
.......
Parsing documentation for pleaserun-0.0.30
Installing ri documentation for pleaserun-0.0.30
Parsing documentation for fpm-1.9.3
Installing ri documentation for fpm-1.9.3
14 gems installed  
[root@m01 tools]# echo $?  #不知道有沒有安裝好的話,能夠檢測這條命令是否執行成功
0
說明:過程可能會有點慢

1.4.1.1 安裝時遇到的問題

1.Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}
解決方法:
[root@m01~]# yum install -y rpm-build
 
2.若是裏面有gcc make的錯誤.
解決方法:
yum install -y gcc  

1.4.2 FPM參數

詳細使用見fpm –help

經常使用參數
-s          指定源類型
-t          指定目標類型,即想要製做爲何包
-n          指定包的名字
-v          指定包的版本號
-C          指定打包的相對路徑  Change directory to here before searching forfiles
-d          指定依賴於哪些包
-f          第二次打包時目錄下若是有同名安裝包存在,則覆蓋它
-p          輸出的安裝包的目錄,不想放在當前目錄下就須要指定
--post-install      軟件包安裝完成以後所要運行的腳本;同--after-install
--pre-install       軟件包安裝完成以前所要運行的腳本;同--before-install
--post-uninstall    軟件包卸載完成以後所要運行的腳本;同--after-remove
--pre-uninstall     軟件包卸載完成以前所要運行的腳本;同--before-remove

1.4.3 使用實例–實戰定製nginx的RPM包

1.4.3.1 安裝nginx

  • 檢測80端口是否開啓或者被佔用(若是開啓請關閉)
lsof -i:80
  • 檢查防火牆是否開啓(我這是centos7)
[root@cs tools]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
  • 檢查selinux是否開啓
[root@cs tools]# grep 'SELINUX' /etc/selinux/config 
# SELINUX= can take one of these three values:
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
SELINUXTYPE=targeted
  • 下載並安裝nginx
yum -y install pcre-devel openssl-devel
useradd nginx -M -s /sbin/nologin
tar xf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/application/nginx-1.12.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /application/nginx-1.12.2/ /application/nginx

1.4.4 編寫腳本

[root@oldboy ~]# cd /server/scripts/
[root@oldboy scripts]# vim nginx_rpm.sh  # 這是安裝完rpm包要執行的腳本
#!/bin/bash

useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.12.2/ /application/nginx

1.4.5 打包

[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.12.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.12.2/
Created package {:path=>"nginx-1.12.2-1.x86_64.rpm"}
fpm          #固定命令
-t            #指定目標類型,即想要製做爲何包
-s            #指定源類型
rpm          #對rpm進行轉換
dir           #將目錄打包成所須要的類型,能夠用於源碼編譯安裝的軟件包
-n            #指定包名
-v            #指定包的版本號
-d            #指定依賴哪些包
-f            #第二次打包時目錄下若是有同名安裝包在,則覆蓋它
--post-install      #軟件包安裝完成以後所要運行的腳本;同--after-install
libiconv-devel  (打包php的時候5.5以上的php不要安裝這個依賴包,不然你打包好以後,yum安裝會報錯)
[root@m01 server]# ll -h nginx-1.12.2-1.x86_64.rpm 
-rw-r--r-- 1 root root 2.6M Feb 21 03:13 nginx-1.12.2-1.x86_64.rpm
  • 查看rpm自帶執行腳本,執行腳本是否是以文件的形式存在rpm中的
[root@cs tools]# rpm -qp --scripts nginx-1.12.2-1.x86_64.rpm 
postinstall scriptlet (using /bin/sh):
#!/bin/bash

useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.12.2/ /application/nginx
  • 查看rpm的依賴
[root@cs tools]# rpm -qpR nginx-1.12.2-1.x86_64.rpm 
pcre-devel
openssl-devel
/bin/sh
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
  • 查看rpm的內容
[root@cs tools]# rpm -qpl nginx-1.12.2-1.x86_64.rpm 
/application/nginx-1.12.2/conf/fastcgi.conf
/application/nginx-1.12.2/conf/fastcgi.conf.default
/application/nginx-1.12.2/conf/fastcgi_params
/application/nginx-1.12.2/conf/fastcgi_params.default
/application/nginx-1.12.2/conf/koi-utf
/application/nginx-1.12.2/conf/koi-win
/application/nginx-1.12.2/conf/mime.types
....
  • 查看rpm包信息
[root@cs tools]# rpm -qpi nginx-1.12.2-1.x86_64.rpm 
Name        : nginx
Version     : 1.12.2
Release     : 1
Architecture: x86_64
Install Date: (not installed)
Group       : default
Size        : 5686816
License     : unknown
Signature   : (none)
Source RPM  : nginx-1.12.2-1.src.rpm
Build Date  : Wed 21 Feb 2018 01:24:36 PM CST
Build Host  : cs
Relocations : / 
Packager    : <root@cs>
Vendor      : root@cs
URL         : http://example.com/no-uri-given
Summary     : no description given
Description :
no description given

1.4.6 安裝rpm包

1.4.6.1 安裝rpm包的三種方法

rpm命令安裝
[root@LB-nginx-01 ~]# rpm -ivh nginx-1.12.2-1.x86_64.rpm
error: Failed dependencies:
       pcre-devel is needed by nginx-1.12.2-1.x86_64
       openssl-devel is needed by nginx-1.12.2-1.x86_64
但會報如上依賴錯誤,須要先yum安裝依賴才能安裝rpm包。
yum命令安裝rpm包
yum -y localinstall nginx-1.12.2-1.x86_64.rpm
這個命令會自動先安裝rpm包的依賴,而後再安裝rpm包。
搭建內網yum倉庫YUM倉庫搭建

1.4.7 錯誤說明:

[root@m01 application]# fpm -s dir -t rpm -n mysql -v 5.6.34   -f /application/mysql-5.6.34-linux-glibc2.5-x86_64  --post-install /server/scripts/mysql_rpm.sh 
All flags should be before the first argument (stray flags found: ["--post-install"] {:level=>:warn}
Invalid package configuration: Cannot package the path './--post-install', does it exist? {:level=>:error}
解決方法: --post-install不能放到最後,選項的順序最好不要隨意變換

1.4.8 安裝createrepo軟件(建立存儲庫)

yum -y install createrepo
  • 建立yum倉庫目錄
mkdir -p /application/nginx/html/CentOS7/
#將保存好的rpm包放入/application/nginx/html/CentOS7/
  • 初始化yum倉庫
createrepo -pdo /application/nginx/html/CentOS7/ /application/nginx/html/CentOS7/
  • 當有新的rpm包執行更新(剛開始不用執行)
createrepo --update /application/nginx/html/CentOS7/
  • 修改nginx配置文件,好默認可以訪問CentOS目錄下的rpm包
cat  >/application/nginx/conf/nginx.conf<<EOF
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html/CentOS7;
            autoindex on;         ##開啓目錄瀏覽功能,默認是不支持的
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
EOF
  • 檢查語法重啓nginx服務
/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx
  • 只下載軟件不安裝
yum install yum-utils -y   #安裝yum包相關軟件
yumdownloader pcre-devel openssl-devel
  • 每加入一個rpm包就要更新一下
createrepo --update/application/nginx/html/CentOS7

#訪問ip能夠查看yum倉庫內容,下面會多個一個repodata/目錄,是createrepo生成的。
#這是一個簡單的yum倉庫就搭建完成了,可是如今只有nginx的功能,之後能夠增長更多的內容,放進來目錄便可

1.5 客戶端部署

  • 備份原有repo
cd /etc/yum.repos.d/
mkdir yum_bak
#把以前的yum源移動到剛建立的目錄作備用
mv *.repo yum_bak
  • 新建一個本地yum源文件
cat >/etc/yum.repos.d/local.repo<<EOF
[local]
name=Server
baseurl=http://10.0.0.61
enabled=1
gpgcheck=0
EOF
  • 清空以前的緩存
yum clean all
  • 在哪一個路徑下執行yum操做沒有影響
[root@web01 yum.repos.d]# yum install nginx
  • 檢查nginx是否安裝成功
[root@web01 yum.repos.d]# netstat -lntup|grep nginx
tcp        0      0 0.0.0.0:80       0.0.0.0:*       LISTEN      2022/nginx          
[root@web01 yum.repos.d]# ps -ef|grep nginx
root   2022   1  0 21:52 ?  00:00:00 nginx: master process/application/nginx/sbin/nginx
www   2023   2022  0 21:52 ?     00:00:00 nginx: worker process       
root   2027   1947  0 21:52 pts/1    00:00:00 grep nginx
  • 其餘
cachedir=/var/cache/yum
  //yum 緩存的目錄,yum 在此存儲下載的rpm 包和數據庫,默認設置爲/var/cache/yum

keepcache=0
  //安裝完成後是否保留軟件包,0爲不保留(默認爲0),1爲保留

debuglevel=2
  //Debug 信息輸出等級,範圍爲0-10,缺省爲2

logfile=/var/log/yum.log
  //yum 日誌文件位置。用戶能夠到/var/log/yum.log 文件去查詢過去所作的更新。

exactarch=1
  //有1和0兩個選項,設置爲1,則yum 只會安裝和系統架構匹配的軟件包,例如,yum 不會將i686的軟件包安裝在適合i386的系統中。默認爲1。

obsoletes=1
  //這是一個update 的參數,具體請參閱yum(8),簡單的說就是至關於upgrade,容許更新陳舊的RPM包。

gpgcheck=1 
 // 有1和0兩個選擇,分別表明是不是否進行gpg(GNU Private Guard) 校驗,以肯定rpm 包的來源是有效和安全的。這個選項若是設置在[main]部分,則對每一個repository 都有效。默認值爲0。

plugins=1
  //是否啓用插件,默認1爲容許,0表示不容許。咱們通常會用yum-fastestmirror這個插件。

installonly_limit=5         #容許保留多少個內核包。

distroverpkg=redhat-release

  //指定一個軟件包,yum 會根據這個包判斷你的發行版本,默認是redhat-release,也能夠是安裝的任何針對本身發行版的rpm 包。

rpm的經常使用命令

rpm -qpi your.rpm #查看rpm包信息
rpm -qpl your.rpm #查看rpm包內容
rpm -qpR your.rpm #查看rpm包的依賴
rpm -qp --scripts your.rpm #查看rpm包要執行的腳本,存的不是文件了。
rpm -ivh your.rpm #安裝rpm包

老男孩參考文檔http://blog.oldboyedu.com/autodeploy-rpm/

相關文章
相關標籤/搜索