包括服务器和桌面环境,自动识别指令集架构,支持x86/x64/arm/arm64/mips64/loongarch64/riscv64。
curl http://x.newlifex.com/dotNet/net.sh | sudo bash
#!/bin/bash
# 获取当前系统的处理器架构并存储在变量arch中
arch=$(uname -m)
# 定义版本号变量
ver="8.0.6"
# 定义下载文件的前缀
prefix="aspnetcore-runtime-$ver-linux"
# 定义下载源的URL
source="http://x.newlifex.com"
# 输出当前处理器架构
echo arch: $arch
# 检查是否为Alpine系统
if [ -f "/proc/version" ]; then
# 搜索文件中是否包含musl或Alpine
cat /proc_version | grep -q -E 'musl|Alpine'
# 如果上一条命令的返回值是0(表示找到了匹配项)
if [ $? -eq 0 ]; then
# 修改文件前缀,添加musl标识
prefix="$prefix-musl"
# 安装必要的库
apk add libgcc libstdc++
fi
fi
# 根据处理器架构确定下载的文件名
if [ $arch == "x86_64" ]; then
gzfile="$prefix-x64.tar.gz"
elif [ $arch == "amd64" ]; then
gzfile="$prefix-x64.tar.gz"
elif [ $arch == "aarch64" ]; then
gzfile="$prefix-arm64.tar.gz"
elif [ $arch == "armv7l" ]; then
gzfile="$prefix-arm.tar.gz"
elif [ $arch == "riscv64" ]; then
gzfile="dotnet-sdk-8.0.101-linux-riscv64-gcc.tar.gz"
wget $source/dotnet/$gzfile
elif [ $arch == "loongarch64" ]; then
gzfile="aspnetcore-runtime-8.0.5-linux-loongarch64.tar.gz"
wget $source/dotnet/$gzfile
else
gzfile="$prefix-$arch.tar.gz"
fi
# 输出确定的文件名
echo gzfile: $gzfile
# 如果文件不存在,则下载
if [ ! -f "$gzfile" ]; then
wget $source/dotnet/$ver/$gzfile
fi
# 定义安装目标目录
target="/usr/lib/dotnet"
# 如果目标目录不存在,则使用备用目录
if [ ! -d $target ]; then
target="/usr/share/dotnet"
fi
# 输出最终的安装目标目录
echo target: $target
# 如果目标目录不存在,则创建目录
if [ ! -d $target ]; then
mkdir $target
fi
# 解压下载的文件到目标目录
tar -xzf $gzfile -C $target
# 如果系统中不存在dotnet的软链接,则创建
if [ ! -f "/usr/bin/dotnet" ]; then
ln $target/dotnet /usr/bin/dotnet -s
fi
# 如果系统是centos并且架构是x86_64
if [ $arch == "x86_64" ] && [ -f /etc/os-release ]; then
# 获取系统ID
os_id=$(grep '^ID=' /etc/os-release | awk -F= '{print $2}' | tr -d '"')
# 输出系统ID
echo os_id: $os_id
# 如果系统是centos
if [ "$os_id" == "centos" ]; then
# 定义libstdc++的路径
libstd=/usr/lib64/libstdc++.so.6
# 定义新的libstdc++库的路径
libsrc=/usr/lib64/libstdc++.so.6.0.26
# 如果旧库存在而新库不存在
if [ -f $libstd ] && [ ! -f $libsrc ]; then
# 如果新库的文件不存在,则下载
if [ ! -f libstdcpp.6.0.26.so ]; then
wget $source"/dotnet/libstdcpp.6.0.26.so"
fi
# 复制新库到指定位置
cp libstdcpp.6.0.26.so $libsrc
# 赋予执行权限
chmod +x $libsrc
# 删除旧的库链接
rm $libstd
# 创建新的库链接
ln -s $libsrc $libstd
fi
# 安装libicu库
yum install -y libicu
elif [ "$os_id" == "neokylin" ]; then
# 以下逻辑与centos相同,处理neokylin系统
libstd=/usr/lib64/libstdc++.so.6
libsrc=/usr/lib64/libstdc++.so.6.0.26
if [ -f $libstd ] && [ ! -f $libsrc ]; then
if [ ! -f libstdcpp.6.0.26.so ]; then
wget $source"/dotnet/libstdcpp.6.0.26.so"
fi
cp libstdcpp.6.0.26.so $libsrc
chmod +x $libsrc
rm $libstd
ln -s $libsrc $libstd
fi
yum install -y libicu
elif [ "$os_id" == "Linx" ]; then
# 以下逻辑与centos相同,处理Linx系统
libstd=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
libsrc=/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.26
if [ -f $libstd ] && [ ! -f $libsrc ]; then
if [ ! -f libstdcpp.6.0.26.so ]; then
wget $source"/dotnet/libstdcpp.6.0.26.so"
fi
cp libstdcpp.6.0.26.so $libsrc
chmod +x $libsrc
rm $libstd
ln -s $libsrc $libstd
fi
apt install -y libicu
else
apt install -y libicu
fi
fi
if [ $arch == "aarch64" ] && [ -f /etc/os-release ]; then
# 获取系统ID
os_id=$(grep '^ID=' /etc/os-release | awk -F= '{print $2}' | tr -d '"')
# 输出系统ID
echo os_id: $os_id
# 如果系统是KylinSecOS
if [ "$os_id" == "KylinSecOS" ]; then
# 定义libstdc++的路径
libstd=/lib64/libstdc++.so.6
# 定义新的libstdc++库的路径
libsrc=/lib64/libstdc++.so.6.0.28
# 如果旧库存在而新库不存在
if [ -f $libstd ] && [ ! -f $libsrc ]; then
# 如果新库的文件不存在,则下载
if [ ! -f libstdcpp-arm64.6.0.28.so ]; then
wget $source"/dotnet/libstdcpp-arm64.6.0.28.so"
fi
# 复制新库到指定位置
cp libstdcpp-arm64.6.0.28.so $libsrc
# 赋予执行权限
chmod +x $libsrc
# 删除旧的库链接
rm $libstd
# 创建新的库链接
ln -s $libsrc $libstd
fi
# 安装libicu库
yum install -y libicu
else
apt install -y libicu
fi
fi
# 输出dotnet的信息
dotnet --info
# 删除下载的文件
# rm $gzfile -f
# 删除本脚本文件
# rm net.sh