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 可不指定 是默认的压缩和解压算法 可指定其他算法
准备环境与脚本
标签:iptables,ip,echo,安装包,rpm,Linux,root,makeself From: https://www.cnblogs.com/xyff/p/18538683[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