Linux下使用makeself製作一鍵安裝包
下載makeself
yum -y install makeself
makeself 命令和引數
makeself.sh --gzip . <output_file.run> "<display_name>" <startup_script>
. 表示當前目錄,這樣 makeself 將會打包當前目錄下的所有檔案和子目錄。該目錄最好使用絕對路徑
output_file.run: 生成的自解壓指令碼的輸出檔名。
"display_name": 在指令碼執行時顯示的名稱。
startup_script (可選): 在解壓後執行的啟動指令碼。包括shell 和 python 等
注 --gzip 可不指定 是預設的壓縮和解壓演算法 可指定其他演算法
準備環境與指令碼
[root@zookeeper1 ~/fire]#pwd /root/fire [root@zookeeper1 ~/fire]#ll total 472 -rwxr-xr-x 1 root root 2349 Nov 10 21:39 add_iptables_rules.sh -rw-r--r-- 1 root root 76116 Aug 10 2017 dos2unix-6.0.3-7.el7.x86_64.rpm -rw-rw-rw- 1 root root 91 Nov 10 16:37 ip_list.txt -rw-r--r-- 1 root root 53704 Oct 15 2020 iptables-services-1.4.21-35.el7.x86_64.rpm
下載了相關rpm包和shell指令碼
需要將上述的rpm包和shell指令碼打包成為一鍵安裝包.run
makeself 目錄路徑 打包成的.run檔名 "顯示名稱" ./add_iptables_rules.sh(執行指令碼) [root@zookeeper1 ~/fire]#makeself ~/fire fire.run "新增防火牆規則" ./add_iptables_rules.sh # 將家目錄下的fire目錄打包成為 fire.run 檔案 add_iptables_rules.sh 是執行指令碼 內容如下
add_iptables_rules.sh
指令碼內容
- 此指令碼是從ip_list.txt檔案中讀取ip 並使用iptables 新增防火牆規則,旨在允許ip_list.txt
- 中的ip訪問 其餘ip全部拒絕
- 包含iptables安裝啟動 一整套的流程 只需要更改的ip_list.txt的ip地址即可
#!/bin/bash # 指定儲存 IP 列表的檔名 IP_FILE="ip_list.txt" # 關閉 firewalld 服務 systemctl stop firewalld systemctl disable firewalld # 定義一個函式用於安裝本地 RPM 並檢查結果 install_rpm() { local package="$1" local rpm_file="$2" if rpm -qa | grep -qw "$package"; then echo "$package 已經成功安裝" else echo "正在安裝 $package" if rpm -ivh "$rpm_file"; then echo "$package 安裝成功" else echo "無法安裝 $package:出現未知錯誤" >&2 exit 1 fi fi } # 安裝所需的軟體包 install_rpm "iptables-services" "iptables-services-1.4.21-35.el7.x86_64.rpm" install_rpm "dos2unix" "dos2unix-6.0.3-7.el7.x86_64.rpm" # 新增防火牆核心模組到核心中 echo "載入 iptables 模組" modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_state # 設定系統在啟動時載入這些模組 echo "確保系統在啟動時載入這些模組" cat <<EOF | sudo tee -a /etc/rc.d/rc.local modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_state EOF # 賦予 rc.local 檔案執行許可權 chmod +x /etc/rc.d/rc.local # 啟動並啟用 iptables 服務 systemctl start iptables systemctl enable iptables iptables -F iptables -X iptables -Z # 校正ip_list檔案格式,確保結尾為 \n dos2unix $IP_FILE # 檢查檔案是否存在 if [[ ! -f "$IP_FILE" ]]; then echo "IP 地址檔案 '$IP_FILE' 未找到!" >&2 exit 1 fi # 為每個 IP 生成 iptables 規則 while IFS= read -r ip; do # 忽略空行和以 # 開頭的註釋行 if [[ -z "$ip" || "$ip" == \#* ]]; then continue fi # 為讀取的每個 IP 地址插入一條允許規則 iptables -I INPUT -s "$ip" -j ACCEPT echo "已插入規則以接受來自 $ip 的流量" done < "$IP_FILE" # 插入全域性拒絕所有其他入站流量的規則 iptables -P INPUT DROP echo "所有指定的 iptables 規則已更新。" # 儲存並重啟 iptables 服務以確保規則生效 # iptables-save > /etc/sysconfig/iptables # systemctl restart iptables