ipv4 only work
This commit is contained in:
@@ -1,257 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
dotnetDir="/opt/dotnet"
|
||||
dotnetVersion="10.0"
|
||||
dotnetRuntime="Microsoft.AspNetCore.App 10.0."
|
||||
dotnetUrl="https://dot.net/v1/dotnet-install.sh"
|
||||
|
||||
if [ -d "/etc/dns/config" ]
|
||||
then
|
||||
dnsDir="/etc/dns"
|
||||
else
|
||||
dnsDir="/opt/technitium/dns"
|
||||
fi
|
||||
|
||||
dnsConfig="/etc/dns"
|
||||
dnsLog="/var/log/technitium/dns"
|
||||
dnsTar="$dnsDir/DnsServerPortable.tar.gz"
|
||||
dnsUrl="https://download.technitium.com/dns/DnsServerPortable.tar.gz"
|
||||
|
||||
serviceUser="dns-server"
|
||||
installLog="$dnsDir/install.log"
|
||||
|
||||
echo ""
|
||||
echo "==============================="
|
||||
echo "Technitium DNS Server Installer"
|
||||
echo "==============================="
|
||||
echo ""
|
||||
|
||||
mkdir -p $dnsDir
|
||||
mkdir -p $dnsConfig
|
||||
|
||||
echo "" > $installLog
|
||||
|
||||
if dotnet --list-runtimes 2> /dev/null | grep -q "$dotnetRuntime";
|
||||
then
|
||||
dotnetFound="yes"
|
||||
else
|
||||
dotnetFound="no"
|
||||
fi
|
||||
|
||||
if [ ! -d $dotnetDir ] && [ "$dotnetFound" = "yes" ]
|
||||
then
|
||||
echo "ASP.NET Core Runtime is already installed."
|
||||
else
|
||||
if [ -d $dotnetDir ] && [ "$dotnetFound" = "yes" ]
|
||||
then
|
||||
dotnetUpdate="yes"
|
||||
echo "Updating ASP.NET Core Runtime..."
|
||||
else
|
||||
dotnetUpdate="no"
|
||||
echo "Installing ASP.NET Core Runtime..."
|
||||
fi
|
||||
|
||||
curl -sSL $dotnetUrl | bash /dev/stdin -c $dotnetVersion --runtime aspnetcore --no-path --install-dir $dotnetDir --verbose >> $installLog 2>&1
|
||||
|
||||
# On Alpine Linux dotnet requires libstdc++
|
||||
if command -v apk >/dev/null 2>&1
|
||||
then
|
||||
echo "Installing ASP.NET Core Runtime dependencies..."
|
||||
apk add --no-cache libstdc++ >> $installLog 2>&1
|
||||
fi
|
||||
|
||||
if [ ! -f "/usr/bin/dotnet" ]
|
||||
then
|
||||
ln -s $dotnetDir/dotnet /usr/bin >> $installLog 2>&1
|
||||
fi
|
||||
|
||||
if dotnet --list-runtimes 2> /dev/null | grep -q "$dotnetRuntime";
|
||||
then
|
||||
if [ "$dotnetUpdate" = "yes" ]
|
||||
then
|
||||
echo "ASP.NET Core Runtime was updated successfully!"
|
||||
else
|
||||
echo "ASP.NET Core Runtime was installed successfully!"
|
||||
fi
|
||||
else
|
||||
echo "Failed to install ASP.NET Core Runtime. Please check '$installLog' for details."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Downloading Technitium DNS Server..."
|
||||
|
||||
if ! curl -o $dnsTar --fail $dnsUrl >> $installLog 2>&1
|
||||
then
|
||||
echo "Failed to download Technitium DNS Server from: $dnsUrl"
|
||||
echo "Please check '$installLog' for details."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -d $dnsConfig ]
|
||||
then
|
||||
echo "Updating Technitium DNS Server..."
|
||||
else
|
||||
echo "Installing Technitium DNS Server..."
|
||||
fi
|
||||
|
||||
tar -zxf $dnsTar -C $dnsDir >> $installLog 2>&1
|
||||
|
||||
echo ""
|
||||
|
||||
if $( dotnet $dnsDir/DnsServerApp.dll --icu-test >> $installLog 2>&1 ) >/dev/null 2>&1;
|
||||
then
|
||||
echo "ICU package is already installed."
|
||||
else
|
||||
echo "Checking for required ICU package..."
|
||||
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
# Debian/Ubuntu based
|
||||
if ! dpkg -l | grep -q "libicu"; then
|
||||
echo "Installing required ICU package..."
|
||||
apt-get update >> $installLog 2>&1
|
||||
|
||||
# Try to install the most common package name
|
||||
if apt-cache show libicu74 >/dev/null 2>&1; then
|
||||
echo "Installing libicu74 package..."
|
||||
apt-get install -y libicu74 >> $installLog 2>&1
|
||||
elif apt-cache show libicu72 >/dev/null 2>&1; then
|
||||
echo "Installing libicu72 package..."
|
||||
apt-get install -y libicu72 >> $installLog 2>&1
|
||||
elif apt-cache show libicu70 >/dev/null 2>&1; then
|
||||
echo "Installing libicu70 package..."
|
||||
apt-get install -y libicu70 >> $installLog 2>&1
|
||||
else
|
||||
# Fallback to a generic approach
|
||||
echo "No specific libicu package was found, trying generic installation..."
|
||||
apt-get install -y libicu* >> $installLog 2>&1
|
||||
fi
|
||||
fi
|
||||
elif command -v dnf >/dev/null 2>&1; then
|
||||
# Fedora/RHEL based
|
||||
if ! rpm -qa | grep -q "libicu"; then
|
||||
echo "Installing required ICU package..."
|
||||
dnf install -y libicu >> $installLog 2>&1
|
||||
fi
|
||||
elif command -v yum >/dev/null 2>&1; then
|
||||
# Older RHEL/CentOS systems
|
||||
if ! rpm -qa | grep -q "libicu"; then
|
||||
echo "Installing required ICU package..."
|
||||
yum install -y libicu >> $installLog 2>&1
|
||||
fi
|
||||
elif command -v zypper >/dev/null 2>&1; then
|
||||
# openSUSE based
|
||||
if ! rpm -qa | grep -q "libicu"; then
|
||||
echo "Installing required ICU package..."
|
||||
zypper install -y libicu >> $installLog 2>&1
|
||||
fi
|
||||
elif command -v pacman >/dev/null 2>&1; then
|
||||
# Arch based
|
||||
if ! pacman -Q | grep -q "icu"; then
|
||||
echo "Installing required ICU package..."
|
||||
pacman -S --noconfirm icu >> $installLog 2>&1
|
||||
fi
|
||||
elif command -v apk >/dev/null 2>&1; then
|
||||
# Alpine Linux
|
||||
if ! apk list --installed | grep -q "icu"; then
|
||||
echo "Installing required ICU package..."
|
||||
apk add --no-cache icu >> $installLog 2>&1
|
||||
fi
|
||||
else
|
||||
echo "Failed to install Technitium DNS Server: could not determine package manager to install ICU package. Please install ICU package manually and try again."
|
||||
echo "Please read the 'Missing ICU Package' section in this blog post to understand how to manually install the ICU package for your distro: https://blog.technitium.com/2017/11/running-dns-server-on-ubuntu-linux.html"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#test again to confirm
|
||||
if $( dotnet $dnsDir/DnsServerApp.dll --icu-test >> $installLog 2>&1 ) >/dev/null 2>&1;
|
||||
then
|
||||
echo "ICU package was installed successfully!"
|
||||
else
|
||||
echo "Failed to install Technitium DNS Server: failed to install ICU package. Please install ICU package manually and try again."
|
||||
echo "Please read the 'Missing ICU Package' section in this blog post to understand how to manually install the ICU package for your distro: https://blog.technitium.com/2017/11/running-dns-server-on-ubuntu-linux.html"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
if [ "$(ps --no-headers -o comm 1 | tr -d '\n')" = "systemd" ]
|
||||
then
|
||||
if [ -f "/etc/systemd/system/dns.service" ]
|
||||
then
|
||||
echo "Configuring permissions..."
|
||||
chown -R $serviceUser:$serviceUser $dnsDir $dnsConfig $dnsLog >> $installLog 2>&1
|
||||
|
||||
echo "Restarting systemd service..."
|
||||
systemctl restart dns.service >> $installLog 2>&1
|
||||
else
|
||||
mkdir -p $dnsLog
|
||||
|
||||
echo "Configuring user and permissions..."
|
||||
useradd --system -M --shell /usr/sbin/nologin --user-group $serviceUser >> $installLog 2>&1
|
||||
chown -R $serviceUser:$serviceUser $dnsDir $dnsConfig $dnsLog >> $installLog 2>&1
|
||||
|
||||
echo "Configuring systemd service..."
|
||||
cp $dnsDir/systemd.service /etc/systemd/system/dns.service
|
||||
systemctl enable dns.service >> $installLog 2>&1
|
||||
|
||||
systemctl stop systemd-resolved >> $installLog 2>&1
|
||||
systemctl disable systemd-resolved >> $installLog 2>&1
|
||||
|
||||
systemctl start dns.service >> $installLog 2>&1
|
||||
|
||||
if [ -f "/etc/NetworkManager/NetworkManager.conf" ]
|
||||
then
|
||||
currentVal=$(grep -F "dns=" /etc/NetworkManager/NetworkManager.conf)
|
||||
|
||||
if [ "$currentVal" = "" ]
|
||||
then
|
||||
printf "\n[main]\ndns=none\n" >> /etc/NetworkManager/NetworkManager.conf 2>> $installLog
|
||||
elif [ "$currentVal" != "dns=none" ]
|
||||
then
|
||||
sed -i "s/$currentVal/dns=none/g" /etc/NetworkManager/NetworkManager.conf 2>> $installLog
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
elif [ -x "/sbin/rc-service" ]
|
||||
then
|
||||
if [ -f "/etc/init.d/dns" ]
|
||||
then
|
||||
echo "Configuring permissions..."
|
||||
chown -R $serviceUser:$serviceUser $dnsDir $dnsConfig $dnsLog >> $installLog 2>&1
|
||||
|
||||
echo "Restarting OpenRC service..."
|
||||
rc-service dns stop >> $installLog 2>&1
|
||||
rc-service dns start >> $installLog 2>&1
|
||||
else
|
||||
mkdir -p $dnsLog
|
||||
|
||||
echo "Configuring user and permissions..."
|
||||
addgroup -S $serviceUser >> $installLog 2>&1
|
||||
adduser -H -S -D -s /bin/false -G $serviceUser $serviceUser >> $installLog 2>&1
|
||||
chown -R $serviceUser:$serviceUser $dnsDir $dnsConfig $dnsLog >> $installLog 2>&1
|
||||
|
||||
echo "Configuring OpenRC service..."
|
||||
cp $dnsDir/openrc.service /etc/init.d/dns
|
||||
chmod +x /etc/init.d/dns
|
||||
rc-update add dns >> $installLog 2>&1
|
||||
rc-service dns start >> $installLog 2>&1
|
||||
fi
|
||||
else
|
||||
echo "Failed to install Technitium DNS Server: systemd/openrc was not detected."
|
||||
echo "Please read the 'Installing DNS Server Manually' section in this blog post to understand how to manually install the DNS server on your distro: https://blog.technitium.com/2017/11/running-dns-server-on-ubuntu-linux.html"
|
||||
exit 1
|
||||
fi 2>/dev/null
|
||||
|
||||
cp -a /etc/resolv.conf $dnsDir/resolv.conf.bak >> $installLog 2>&1
|
||||
rm /etc/resolv.conf >> $installLog 2>&1
|
||||
printf "# Generated by Technitium DNS Server Installer\n\nnameserver 127.0.0.1\n" > /etc/resolv.conf 2>> $installLog
|
||||
|
||||
echo ""
|
||||
echo "Technitium DNS Server was installed successfully!"
|
||||
echo "Open http://$(cat /proc/sys/kernel/hostname):5380/ to access the web console."
|
||||
echo ""
|
||||
echo "Donate! Make a contribution by becoming a Patron: https://www.patreon.com/technitium"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user