RHEL/CentOS 離線安裝 Nginx rpm
9 |
接到指令要安裝一台 Nginx 當 Reverse Proxy。依過去幾次經驗估計是件簡單任務,應可在半小時內搞定。基本上就是照著(How to install and use Nginx on CentOS 7 / RHEL 7)的步驟,再依先前筆記在 /etc/nginx/conf.d 加入一個 my-web1.conf:
server {
listen 80;
location / {
proxy_pass http://remote-server:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
有別於過去自己玩是用 CentOS,這回要安裝的 Linux 版本是 RHEL,但問題不大,CentOS 是移除 RedHat 商標的 RHEL,本質相同。但另一個限制就讓缺乏經驗的 Linux 麻瓜狠摔一跤,難度由接小孩提高成進火場救人,工時也從 30 分鐘暴增到 3 小時。受限網路政策,要裝 Nginx 的 Linux 主機無法連上網際網路,yum install nginx 一行搞定安裝的如意算盤被砸個粉碎!
第一次遇到離線安裝 rpm 挑戰,摸索一陣子才找到解法,筆記如下:
- 找一台可上網的 CentOS 或 RHEL,使用指令
sudo yum nginx -y --downloadonly --downloaddir=/tmp/nginx
yum 會將相依套件一次下載到本機指定目錄。 - 使用
tar zcvf nginx.tgz /tmp/nginx
打包上傳到目的主機解開 - 用
sudo yum localinstall nginx-1.16.1-1.el7.x86_64.rpm
即可安裝,但我遇到很麻煩的套件相依問題:安裝 nginx 前需先裝 nginx-all-modules,要裝 nginx-all-modules 則需要先裝 nginx-mod-stream,要裝 nginx-mod-stream 卻要求得先裝好 nginx。登楞! 出現迴圈,無解。 - yum 有 --exclude=packageName 、--skip-broken 兩個與相依性有關的參數可用,但實測都無法忽略缺少相依套件錯誤。
- 查到
rpm -ivh --nodeps --force nginx-1.16.1-1.el7.x86_64.rpm
可以無視依賴關係強迫安裝。參考
最後我寫了批次檔,對下載回來的每個套件都跑一次 rpm -ivh --nodeps --force,總算裝好 Nginx,感動!
折騰半天,收獲是再累積一些冷門經驗。
Tips of installing Nginx on CentOS/RHEL without Internet connection.
Comments
# by Joker
黑大真的什麼都要碰耶,請收下膝蓋
# by Jeffrey
to Joker, 吾老仍賤,故多能鄙事 Orz
# by Fiurther
rpm喔,小錯字,好奇問一下如果用光碟會不會快一點
# by Jeffrey
to Fiurther, 指 RHEL/CentOS 安裝光碟嗎?用它架個 Local Yum Repository 可省掉不少事,但不少套件不在收錄範圍(例如 Ngnix 就沒有),還是常需要從網路取得。
# by 偷你
好奇請問 sudo yum nginx -y --downloadonly --downloaddir=/tmp/nginx 雖然會下載Nginx跟相依套件,但感覺是依照「該電腦的套件狀況」而下載 所以才會出現A電腦下載套件,結果移到B電腦安裝仍出現相依性地獄問題 老實說,我以前也遇到類似的問題 我最笨的方法就是找個電腦或是建個VM安裝相同版本的RHEL(安裝時選擇minimal mode) 然後再用像 sudo yum nginx -y --downloadonly --downloaddir=/tmp/nginx 這類指令下載 此時因為環境很乾淨,比較少套件 所以會下載更多的相依套件,避免移到B電腦安裝時出現相依性地獄問題
# by Mike
一個方法是匯出目標機器的rpm清單, 做出一個套件環境相同的模板機 例如: (目標機) rpm -qa --qf='%{NAME}.%{ARCH}' | sort > list 把list 複製到模板機 (模板機) cat list | xargs yum install -y 再從模板機上做yum --downloadonly的動作. 但如果目標機有額外的repository, 就會麻煩一點 還有這無法解決循環相依的問題...
# by 鳥毅
每個作業系統設定都不同,黑大可以試著用Docker最省事
# by pokai
謝謝黑大, 我把心得寫一下, 希望有幫助. sudo yum nginx -y --downloadonly --downloaddir=/tmp/nginx 應加個 install , sudo yum install nginx -y --downloadonly --downloaddir=/tmp/nginx 之後, 我切換到 /tmp/nginx , 用 sudo yum localinstall *.rpm , 就都可以成功 以上是我試驗結果, 提供參考
# by Jeffrey
to pokai, 讚! 能一次搞定省事多了,謝謝分享。