1. 程式人生 > >Linux安裝軟體的步驟

Linux安裝軟體的步驟

一.安裝前瞭解

1.yum源

更新163yum源


#檢視系統已安裝的yum源
rpm -qa|grep yum  或cd /etc/yum.repos.d/

#備份原有源(加個字尾即可)
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.backup

#下載源(例如,163yum源)
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

#清除現有yum源
yum clean all
#建立快取
yum makecache

#更新yum源
yum update

2.檢視軟體是否安裝

因為linux安裝軟體的方式比較多,所以沒有一個通用的辦法能查到某些軟體是否安裝。總結起來就是這樣幾類:
①.rpm包安裝的,可以用rpm -qa檢視

rpm -qa | grep 軟體或者包的名字

②以deb包安裝的,可以用dpkg -l能檢視

dpkg -l | grep 軟體或者包的名字

③yum方法安裝的,可以用yum list installed檢視

yum list installed | grep 軟體或者包的名字

④如果是以原始碼包自己編譯安裝的,例如.tar.gz或者tar.bz2形式的,這個只能看可執行檔案是否存在了。
如果是以root使用者安裝的,可執行程式通常都在/sbin/usr/bin

目錄下。

3.安裝軟體的方式

軟體安裝方式有兩種。一種是使用linux系統自帶的軟體包安裝命令自動執行下載並安裝。不同版本的linux安裝軟體所使用的命令不同。

# debian/ubuntu
apt-get install xx

# fedora/redhat/centOS
yum install xx

另一種是以原始碼編譯的方式來安裝軟體,步驟如下

#下載
wget 地址
#解壓
tar -zxvf xxx.tar.gz
#設定編譯選項
./configure 配置項
#編譯
make
#安裝
make install

4.安裝位置

如果使用linux自帶的包管理工具安裝,則通常會有預設的安裝路徑。

如果使用原始碼編譯的方式安裝,當使用預設編譯選項時,一般的軟體會安裝在/usr/local下,部分軟體二進位制檔案會安裝在/usr/bin/usr/local/bin目錄下,對應的標頭檔案會安裝到/usr/include,軟體幫助文件會安裝到/usr/local/share目錄下。
而通過./configure可以指定各種編譯選項,其中就可指定安裝位置。安裝軟體完畢後執行軟體需要使用絕對路徑或配置環境變數,也就是需要把當前軟體二進位制檔案目錄(bin目錄)加入到系統的環境變數PATH中。

另外,需要說明的是我們使用原始碼安裝時,無論是使用預設位置還是手動指定,通常會選擇安裝在usr/local下,也有人選擇安裝在/opt下,但這篇文章提到,usr/local和/opt已經被廢棄,建議我們直接用rpm包管理工具來安裝。

文章4.1節末尾有這樣一段話

You may think is a bad idea to break your Software (as a whole) in many pieces, instead of keeping it all under a self-contained directory. But a package system (RPM) has a database that manages it all for you in a very professional way, taking care of configuration files, directories etc. And if you spread your Software using the FHS, beyond the user friendliness, you’ll bring an intuitive way to the sysadmin configure it, and work better with performance and security.

大概意思是:有人會認為使用rpm方式安裝會將一個軟體的資料、配置等拆分分別放置在不同目錄下,不便於管理,但RPM內建的資料庫會很專業的進行管理,並有一些優點。

個人認為,選擇哪種方式安裝,是仁者見仁智者見智的事。

二、原始碼編譯安裝

1.指定編譯選項

由於軟體要依賴系統的底層庫資源,軟體配置主要功能為檢查當前系統軟硬體環境,確定當前系統是否滿足當前軟體需要的軟體資源。配置命令一般如下:

./configure --prefix=/usr/local/redis

其中--prefix用來指定安裝路徑,編譯好的二進位制檔案和其他檔案將被安裝到此處。

不同的軟體configure 指令碼都提供豐富的選項,在執行完成後,系統會根據執行的選項和系統的配置生成一個編譯規則檔案Makefile。要檢視當前軟體配置時支援哪些引數,可以使用./configure --help命令。

2.編譯原始碼

在配置好編譯選項後,系統已經生成了編譯軟體需要的Makefile,然後利用這些Makefile進行編譯。編譯軟體時執行make命令,make 會根據Makefile 檔案來生成目標檔案,如二進位制程式等。

#編譯
make
#安裝
make install

3、設定使用者和使用者組,及許可權

我們經常需要啟動mysql、elasticsearch、nginx服務,但又不希望以root的方式啟動(有時候是強制性的,比如elasticsearch就禁止使用root賬號啟動服務),這時候就需要為它們建立單獨的服務賬號,同時為了安全性的考慮,一般都要禁止這些賬號登入Shell

#這裡以nginx為例

# 建立nginx組。
groupadd nginx

# 建立nginx使用者,並加入到nginx組。
# -s(shell):指定使用者登入後所使用的shell。 
# -g:指定使用者所屬的群組。 
# -M:表示不建立使用者登入目錄。
useradd nginx -M -s /sbin/nologin -g nginx  

# 設定nginx目錄及子目錄的所屬的使用者和組
chown -R nginx:nginx nginx

# 設定nginx目錄及子目錄操作許可權(讀、寫、可執行)【可以對不同子目錄分別設定不同的許可權。更安全!!!】
chmod -R 755 nginx

4、在防火牆中開放埠

在centos6中

# (centos6使用iptables)

# 開放80埠
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 檢視服務的自啟情況
chkconfig --list tomcat
# 重啟防火牆
service iptables restart

## 其它操作
# 取消開放80埠
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
# 會提示
service iptables
# 檢視防火牆狀態
service iptables status
# 啟動防火牆
service iptables start
# 停止防火牆
service iptables stop
# 重啟防火牆
service iptables restart
# 永久關閉防火牆
chkconfig iptables off
# 永久關閉後重啟
chkconfig iptables on

在centos7中

# (centos7使用firewall)

# 檢視所有開放的埠
firewall-cmd --zone=public --list-ports
# 開放埠(--permanent永久生效,沒有此引數重啟後失效)
firewall-cmd --zone=public --add-port=80/tcp --permanent    
# 【重新載入】
firewall-cmd --reload
# 檢視
firewall-cmd --zone=public --query-port=80/tcp
# 取消開放的埠
firewall-cmd --zone=public --remove-port=80/tcp --permanent

## 其它操作
# 啟動防火牆
systemctl start firewalld
# 關閉防火牆 
systemctl stop firewalld
# 檢視狀態防火牆狀態
systemctl status firewalld 
# 開機啟用防火牆 
systemctl enable firewalld
# 開機禁用防火牆  
systemctl disable firewalld

5、設定開機啟動

centos6下
方式一:以指令碼的方式開機啟動(/etc/rc.d/rc.local檔案)(不建議)
這種方式是把啟動程式的命令新增到/etc/rc.d/rc.local檔案中。

步驟如下:

vim /etc/rc.d/rc.local

新增啟動命令

export JAVA_HOME=/usr/local/jdk
/usr/local/tomcat/bin/startup.sh start

設定指令碼的可執行許可權

chmod + x /etc/rc.d/rc.local

需要說明的是:官方已經不建議直接使用該檔案了,開啟該檔案檢視頭部註釋部分就知道了。下面是我的翻譯。

該檔案僅作為向下相容的目的來使用。強烈建議建立自己的systed服務或者udev規則來執行指令碼,而不是直接使用該指令碼檔案。
與先前版本相比,由於在引導期間並行執行,此指令碼不會在所有其他服務之後執行。
請注意,必須執行'chmod + x /etc/rc.d/rc.local'以確保該指令碼將在引導期間執行

方式二:以服務的方式開機啟動(/etc/rc.d/init.d目錄)
把寫好的啟動指令碼新增到目錄/etc/rc.d/init.d/,然後使用命令chkconfig設定開機啟動。

vim /etc/init.d/tomcat

編輯內容

#!/bin/bash 
# 
# tomcat startup script for the Tomcat server 
# 
# chkconfig: 345 80 20 
# description: start the tomcat deamon 
# 
# Source function library 
. /etc/rc.d/init.d/functions 
prog=tomcat 
JAVA_HOME=/usr/local/jdk         # 根據自己的路徑改寫JAVA_HOME
export JAVA_HOME 
CATALANA_HOME=/usr/local/tomcat  # 根據自己的路徑改寫CATALANA_HOME
export CATALINA_HOME 
case "$1" in 
start) 
  echo "Starting Tomcat..." 
  $CATALANA_HOME/bin/startup.sh 
  ;; 
stop) 
  echo "Stopping Tomcat..." 
  $CATALANA_HOME/bin/shutdown.sh 
  ;; 
restart) 
  echo "Stopping Tomcat..." 
  $CATALANA_HOME/bin/shutdown.sh 
  sleep 2 
  echo 
  echo "Starting Tomcat..." 
  $CATALANA_HOME/bin/startup.sh 
  ;; 
*) 
  echo "Usage: $prog {start|stop|restart}" 
  ;; 
esac 
exit 0

設定許可權

# 設定指令碼許可權(使用者:rwx,組內使用者:rx,其它:rx)
cd /etc/init.d/
chmod 755 tomcat

或者直接chmod 755 /etc/init.d/tomcat

設定開機啟動

## 【驗證一下指令碼是否配置成功】
# 啟動服務
service tomcat start
# 停止服務
service tomcat stop   
# 重啟服務
service tomcat restart  

## 【設定開機啟動】
# 註冊服務
chkconfig --add tomcat
# 設定開機啟動
chkconfig tomcat on
# 檢視服務開機啟動狀態
chkconfig --list tomcat
# 重啟
reboot

centos7下
centos7開始以systemctl來替代早期版本中的chkconfig和service形式,以實現統一的管理。該systemctl指令碼存放在/usr/lib/systemd/下,有系統服務和使用者服務之分。

  • 系統服務:開機不登陸就能執行的程式。正適合我們通常以無登入許可權的非root使用者來啟動軟體的場景。
    /usr/lib/systemd/system/
  • 使用者服務:
    /usr/lib/systemd/user/

以tomcat為例

vim  /usr/lib/systemd/system/tomcat.service

然後進行編輯

[Unit]
Description=Tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/tomcat/tomcat.pid
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

User=tomcat
Group=tomcat
PrivateTmp=true

[Install]
WantedBy=multi-user.target

編輯完,儲存退出

# 重新載入配置檔案
systemctl daemon-reload

##【驗證下服務能否配置成功】
# 啟動服務
systemctl start tomcat
# 關閉服務
systemctl stop tomcat
# 重啟服務
systemctl restart tomcat
# 顯示服務的狀態
systemctl status tomcat

##【設定開機啟動】
# 設定開機啟動
systemctl enable tomcat
# 檢視服務是否開機啟動
systemctl is-enabled tomcat
# 重啟試試
reboot

## 其它操作
# 禁止開機啟動
systemctl disable tomcat
# 檢視已啟動的服務列表
systemctl list-unit-files|grep enabled
# 檢視啟動失敗的服務列表
systemctl --failed