#!/bin/bash
# debian12/ubuntu20/21/22 安装 网络抓包监控开发环境 libpcap
downDir="/datadisk/eisc/download" ;
installdir="/datadisk/eisc/server" ;
debSystemList=( gcc flex byacc make cmake)
ReleaseList=( libpcapRelease )
MysqlSelectVersion=0;
debCheck()
{
for debname in ${debSystemList[*]}
do
debnameInstalled=$( sudo dpkg -s $debname | grep Package | awk -F":" '{print $2}' | sed 's/ //' )
if [ "$debnameInstalled" == "$debname" ]
then
echo "[ok] 该包 $debname 已经安装,安装信息查看执行:sudo dpkg -l | grep $debname "
else
echo "[runing] 正在安装必备包 $debname..."
sudo apt reinstall -y $debname
fi
done
}
os_release()
{
if [ $USER = "root" ]
then
sudoc=" "
# 判断字符串的等号要加空格,否则无法判断
else
sudoc="sudo"
echo "当前为普通用户,需要输入root 密码... $sudoc"
$sudoc date ;
fi
xitong=` cat /etc/os-release | grep -w ID | awk -F"=" '{print $2}' | sed "s/\"//g" `
case "$xitong" in
"centos" ) aptc="yum" ; dpkgc="rpm -qa " ; echo "当前是 centos 系统" ;;
"ubuntu" ) aptc="apt" ; dpkgc="dpkg -l " ; echo "当前是 ubuntu 系统" ;;
"debian" ) aptc="apt" ; dpkgc="dpkg -l " ; echo "当前是 debian 系统" ;;
esac
$sudoc mkdir -p $downDir $installdir
$sudoc chmod 777 $downDir $installdir # chmod 附加权限
}
downURL_select(){
read -p "选择下载安装包地址: 1 小绿叶技术博客下载 2 官方下载 . 请输入: " selectURL
case $selectURL in
"1") echo "当前选择小绿叶技术博客下载..." ; selectFlag=1 ;;
"2") echo "当前选择官方下载..." ; selectFlag=2 ;;
*) echo "输入错误,请重新执行脚本! " ; exit ;;
esac
}
libpcapRelease()
{
case $selectFlag in
"1") downUrl="http://work.eisc.cn/ruanjian/ubuntu/deb/so" ;;
"2") downUrl="https://www.tcpdump.org/release/" ;;
*) echo "未定义下载地址..." ; exit ;;
esac
if [[ $MysqlSelectVersion = 0 ]]
then
read -p "libpcap 提供版本:1. libpcap-1.10.4 请输入1选择版本, 任意字符退出安装 : " MysqlSelectVersion
case $MysqlSelectVersion in
"1") ReleaseMl="libpcap-1.10.4"; ReleaseInstall="so/libpcap/libpcap1104"; ReleaseBin="include/pcap.h"; Down="$downUrl/$ReleaseMl.tar.gz"; echo "$ReleaseMl 下载地址重新定义为:$Down" ;;
*) ReleaseMl=0 ; echo "[ok]退出安装."
esac
fi
}
libpcap_Compilation_method()
{
echo "[running] 正在安装 $rundir"
sudo ./configure --prefix=$rundir # 不加权限,无法安装到该目录
sudo make ; sudo make install
}
download()
{
sudo mkdir -p $downDir ; sudo chmod 777 -R $downDir
cd $downDir ; echo "当前进入目录进行下载: cd $downDir "
echo "[runing] 正在检查是否下载安装包: $ReleaseMl.tar.gz"
# [ ! -d $setdir ] && echo "[running] 目标安装路径不存在" || break ;
if [ ! -f $ReleaseMl.tar.gz ]
then
echo "[runing] 当前没有下载,正在下载包:wget $Down "
wget $Down -O $downDir/$ReleaseMl.tar.gz
else
echo "[ok] 已经下载: $downDir/$ReleaseMl.tar.gz"
fi
cutNumber=`ls $setdir/* |sort |uniq -c | awk -F" " '{print $1}'` ;
if [[ "$cutNumber" = "" ]] # 判断变量的数值大小,需要双小括号+ 引号
then
echo "[running] 正在解压 $downDir/$ReleaseMl.tar.gz 到目录: $setdir" ;
tar -xzvf $downDir/$ReleaseMl.tar.gz -C $downDir/
mv $downDir/$ReleaseMl/* $downDir/$ReleaseInstall
rm -rf $downDir/$ReleaseMl
else
echo "[ok] 已经解压 : $setdir 正在安装 "
fi
}
RunInstall(){
for i in ${ReleaseList[*]}
do
$i
MakeFlag=1;
soFlag=1
setdir=$downDir/$ReleaseInstall ;
rundir=$installdir/$ReleaseInstall ;
$sudoc mkdir -p $setdir $rundir ; $sudoc chmod 777 $setdir $rundir
echo "setdir=$setdir ; rundir=$rundir "
echo "当前正在安装 $i" ; sleep 1;
case "$ReleaseBin" in
"nginx") [ ! -f $rundir/sbin/$ReleaseBin ] && soFlag=1 || soFlag=0 ;;
"include/pcap.h") [ ! -f $rundir/bin/libpcap ] && soFlag=1 || soFlag=0 ;;
esac
if [[ $ReleaseMl = 0 ]]
then
echo "用户取消安装: $i"
else
if [[ ! -f $rundir/$ReleaseBin ]] && [[ $soFlag = "1" ]]
then
download # 安装前检查是否安装
cd $setdir
echo "[waring] 包没有安装 $rundir/bin/$ReleaseBin 当前进入目录: $setdir " ;
case "$ReleaseBin" in
"nginx" ) nginx_Compilation_method ; Fpath ; $sudoc cp $rundir/sbin/$ReleaseBin /bin/ ;;
"include/pcap.h" ) libpcap_Compilation_method ;;
*) echo "未定指定编译,走通用编译方法..." ; $sudoc ./configure --prefix=$setdir ; $sudoc make -j 4 ; $sudoc make instlal; Fpath ;;
esac
case "$xitong" in
"debian") $sudoc ln -s $rundir/lib/libpcap.so.1 /usr/lib/ ;;
"ubuntu") $sudoc ln -s $rundir/lib/libpcap.so.1 /usr/lib/x86_64-linux-gnu/ ;;
# debian和ubuntu 需要创建软链接, 默认库路径不一致
esac
if [[ -f $rundir/$ReleaseBin ]]
then
echo "[ok] Success installd path: $rundir/sbin/$ReleaseBin"
else
echo "[fail] install Fail : $rundir/sbin/$ReleaseBin "
fi
else
echo "[ok] 已经安装: $rundir/$ReleaseBin"
fi
fi
done
}
main()
{
debCheck; os_release; downURL_select; RunInstall
}
main
# 一键安装: wget ddoss.cn/file/ubuntu/shell/so/libpcap.sh -O libpcap.sh ; sudo chmod +x libpcap.sh;./libpcap.sh
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有