首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >软件环境编译器,自动安装c语言的 libpcap 网络抓包监控开发环境,cmake自动汇编框架shell脚本

软件环境编译器,自动安装c语言的 libpcap 网络抓包监控开发环境,cmake自动汇编框架shell脚本

原创
作者头像
eisc
修改2025-01-08 09:20:59
修改2025-01-08 09:20:59
2130
举报
文章被收录于专栏:linux内核linux内核
代码语言:shell
复制
#!/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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档