1. 程式人生 > >Centos6.9定製rpm包、搭建yum倉庫

Centos6.9定製rpm包、搭建yum倉庫

目錄

1 保留yum安裝軟體時下載下來的rpm包

只需修改yum配置檔案即可。下載下來的rpm包會自動儲存在/var/cache/yum/目錄下

[[email protected] ~]# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
[[email protected] ~]# yum install sl -y
[[email protected] ~]# tree /var/cache/yum/x86_64/6/epel/
/var/cache/yum/x86_64/6/epel/
├── 83f14a3d88054141092be5da12eb18cb1baabd7d52e1ae38bfc98d3d5005490c-primary.sqlite
├── cachecookie ├── packages │ └── sl-5.02-1.el6.x86_64.rpm └── repomd.xml 1 directory, 4 files

2 編譯安裝Nginx

# Download tar.gz package
cd /home/oldboy/tools
wget -q http://nginx.org/download/nginx-1.6.3.tar.gz

# Yum install Dependent package
yum install openssl openssl-devel -y
yum install pcre pcre-devel -y
rpm -qa pcre pcre-devel

# Useradd www
useradd www -s /sbin/nologin -M # Compile and install tar -xf nginx-1.6.3.tar.gz cd nginx-1.6.3 ./configure --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.6.3/ make && make install # Create a soft link ln -s /application/nginx-1.6.3/ /application/nginx # Start nginx
/application/nginx/sbin/nginx # Check port 80 lsof -i :80

3 安裝fpm工具

1 首先安裝依賴包

yum -y install zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel

2 下載ruby,fpm是ruby寫的,因此係統環境需要ruby。不推薦yum安裝ruby,在測試的時候會出現一些問題。

[root@web01 tools]# wget https://ruby.taobao.org/mirrors/ruby/ruby-2.3.0.tar.gz
[root@web01 tools]# tar -xf ruby-2.3.0.tar.gz
[root@web01 tools]# cd ruby-2.3.0
[root@web01 ruby-2.3.0]# ./configure
[root@web01 ruby-2.3.0]# make && make install
[root@web01 ruby-2.3.0]# ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
[root@web01 ~]# whereis gem
gem: /usr/local/bin/gem
[root@web01 ~]# /usr/local/bin/gem install fpm
[root@web01 ~]# fpm -v
1.9.3

# 新增阿里雲的Rubygems倉庫,預設的源為外國源,訪問下載速度比較慢,在新增之前先移除原生的Ruby倉庫
[root@web01 ~]# gem sources
*** CURRENT SOURCES ***

https://rubygems.org/ 
[root@web01 ~]# gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources

# 新增阿里倉庫
[root@web01 ~]# gem sources -a http://mirrors.aliyun.com/rubygems/
http://mirrors.aliyun.com/rubygems/ added to sources
[root@web01 ~]# gem sources
*** CURRENT SOURCES ***

http://mirrors.aliyun.com/rubygems/

3 fpm常用引數

-s:指定源型別
-t:指定目標型別,即想要製作為什麼包
-n:指定包的名字
-v:指定包的版本號
-C:指定打包的相對路徑
-d:指定依賴於哪些包
-f:第二次打包時目錄下如果有同名安裝包存在,則覆蓋它
-p:輸出的安裝包的目錄,不想放在當前目錄下就需要指定
--post-install:軟體包安裝完成之後所要執行的指令碼;同--offer-install
--pre-install:軟體包安裝完成之前所要執行的指令碼;同--before-install
--post-uninstall:軟體包解除安裝完成之後所要執行的指令碼;同--offer-remove
--pre-uninstall:軟體包解除安裝完成之前所要執行的指令碼;同—before-remove

4 fpm支援的源型別包

dir:將目錄打包成所需要的型別,可以用於原始碼編譯安裝的軟體包
rpm:對rpm進行轉換
gem:對rubygem包進行轉換
python:將Python模組打包成相應的型別

5 fpm支援的目標型別包

rpm:轉換為rpm包
deb:轉換為deb包
solaris:轉換為solaris包
puppet:轉換為puppet包

4 將Nginx打包

# 注意--post-install不能放在最後,選項順序最好不要改變
fpm -s dir -t rpm -n nginx -v 1.6.3 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3/

# nginx_rpm.sh
cat >>/server/scripts/nginx_rpm.sh<<EOF
useradd -s /sbin/nologin -M www
ln -s /application/nginx-1.6.3/ /application/nginx
ln -s /application/nginx/sbin/nginx  /usr/local/sbin/
EOF

5 其它機器測試

# scp把rpm包傳送過去
[root@web01 ~]# scp nginx-1.6.3-1.x86_64.rpm [email protected]:/home/oldboy/tools

# 測試
[root@lb01 tools]# yum localinstall nginx-1.6.3-1.x86_64.rpm -y

6 yum倉庫搭建

1 安裝createrepo

[root@web02 ~]# yum install createrepo -y

2 建立yum倉庫目錄並初始化repodata索引檔案

[root@web02 ~]# mkdir -p /application/yum/centos6.9/x86_64/
[root@web02 ~]# cd /application/yum/centos6.9/x86_64/    # 拷貝定製的rpm包到此目錄下
[root@web02 x86_64]# createrepo -pdo /application/yum/centos6.9/x86_64/ /application/yum/centos6.9/x86_64/

3 提供yum服務

# 這裡用python來提供web服務,也可用apache或nginx來提供web服務
[root@web02 x86_64]# python -m SimpleHTTPServer 80 &>/dev/null &   # python的httpd模組
[root@web02 x86_64]# lsof -i :80
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  24680 root    3u  IPv4  32493      0t0  TCP *:http (LISTEN)

4 如果有新的rpm包放入必須更新

[root@web02 x86_64]# createrepo --update /application/yum/centos6.9/x86_64/

5 客戶端修改yum源

cat >>/etc/yum.repo.d/<<EOF
[only]
name=Server
baseurl=http://10.0.0.7        
# baseurl指定yum倉庫IP,如果不是80埠需要加埠
enabled=1
gpgcheck=0
EOF

# 客戶端以安裝nginx為例
# 清除本地快取
[[email protected] ~]# yum clean all

# 顯示本地yum源列表
[[email protected] ~]# yum --enablerepo=only --disablerepo=base,extras,updates,epel list   
# 這裡需要注意--enablerepo為local.repo檔案中定義的only

# 安裝nginx為例#
yum --enablerepo=local --disablerepo=base,extras,updates,epel install nginx -y

6 yum的一些用法

# 只下載包不安裝包
1、yumdownloader pcre-devel openssl-devel
2、yum --downloadonly pcre-devel openssl-devel

# yum本地安裝rpm包
yum localinstall pcre-devel openssl-devel

# yum開啟某些個源,關閉某些源安裝軟體包
yum --enablerepo=local --disablerepo=base,extras,updates,epel install pcre-devel openssl-devel

# yum安裝不做GPG-check
yum install --nogpgcheck pcre-devel openssl-devel

# 檢視yum歷史記錄
yum history

# 列出啟用的軟體庫
yum repolist
yum repolist all # 列出所有的軟體庫,包括禁用的也列出

7 錯誤排查

# 若在客戶端安裝nginx的時候報以下錯誤是因為缺少依賴包的緣故,把其下載下來並更新yum倉庫即可。
yum倉庫:createrepo --update /application/yum/centos6.9/x86_64/
客戶端:yum clean all

Error: Package: nginx-1.6.3-1.x86_64 (only)
           Requires: pcre-devel
Error: Package: nginx-1.6.3-1.x86_64 (only)
           Requires: openssl-devel 

# 需要注意配置檔案書寫是否有誤

7 映象同步公網yum源

上面只是將自己製作的rpm包,放入yum源。但還有一種需求,平時安裝軟體都是從公網下載的,佔用頻寬,因此可以直接使用公網yum源的repodata。
上游yum源必須要支援rsync協議,否則不能使用rsync進行同步。
http://mirrors.ustc.edu.cn/status/

# CentOS官方標準源:rsync://mirrors.ustc.edu.cn/centos/
# epel源:rsync://mirrors.ustc.edu.cn/epel/
# 同步命令:
# 使用rsync同步yum源,為了節省頻寬、磁碟和下載時間,這裡只同步了CentOS6的rpm包,這樣所有的rpm包只佔用了21G,全部同步需要300G左右。

# 同步base源,小技巧,我們安裝系統的光碟映象含有部分rpm包,大概3G,這些就不用重新下載。
/usr/bin/rsync -av rsync://mirrors.ustc.edu.cn/centos/6/os/x86_64/ /data/yum_data/centos/6/os/x86_64/

/usr/bin/rsync -av rsync://mirrors.ustc.edu.cn/centos/6/extras/x86_64/ /data/yum_data/centos/6/extras/x86_64/

/usr/bin/rsync -av rsync://mirrors.ustc.edu.cn/centos/6/updates/x86_64/ /data/yum_data/centos/6/updates/x86_64/

# epel源
/usr/bin/rsync -av --exclude=debug rsync://mirrors.ustc.edu.cn/epel/6/x86_64/ /data/yum_data/epel/6/x86_64/

# 使用內網yum源方法
# 可以自建一個內網dns,如果沒有,可使用hosts解析。
echo '192.168.0.200 mirrors.aliyun.com' >>/etc/hosts

# 結果展示
[root@m01 data]# du -sh yum_data    
21G     yum_data
[root@m01 data]# tree -L 3 yum_data/
yum_data/
├── centos
│   ├── 6
│   │   ├── extras
│   │   ├── os
│   │   └── updates
│   └── RPM-GPG-KEY-CentOS-6
├── epel
│   └── 6
│       └── x86_64