one-click-installation-script/package.sh

321 lines
15 KiB
Bash
Raw Normal View History

2022-12-16 10:34:57 +08:00
#!/bin/bash
2022-12-17 19:14:23 +08:00
#by spiritlhl
#from https://github.com/spiritLHLS/one-click-installation-script
#version: 2022.12.17
2022-12-16 11:25:28 +08:00
2022-12-17 20:16:08 +08:00
# 支持系统Ubuntu 12+Debian 6+
ver="2022.12.17"
2022-12-17 20:21:56 +08:00
changeLog="一键修复apt源加载对应的源"
2022-12-17 20:16:08 +08:00
clear
echo "#######################################################################"
2022-12-17 20:21:56 +08:00
echo "# ${YELLOW}一键修复apt源脚本${PLAIN} #"
2022-12-17 20:16:08 +08:00
echo "# 版本:$ver #"
2022-12-17 20:21:56 +08:00
echo "# 更新日志:$changeLog #"
2022-12-17 20:16:08 +08:00
echo "# ${GREEN}作者${PLAIN}: spiritlhl #"
echo "# ${GREEN}作仓库${PLAIN}: https://github.com/spiritLHLS/one-click-installation-script #"
echo "#######################################################################"
echo "支持系统Ubuntu 12+Debian 6+"
2022-12-17 20:34:19 +08:00
echo "1.修复apt源锁死"
echo "2.修复apt源公钥缺失"
echo "3.修复替换系统可用的apt源列表含国内用阿里源国外用官方源"
2022-12-17 20:16:08 +08:00
# Display prompt asking whether to proceed with checking
read -p "Do you want to proceed with checking? [y/n] " -n 1 confirm
echo ""
# Check user's input and exit if they do not want to proceed
if [ "$confirm" != "y" ]; then
exit 0
fi
2022-12-16 11:31:35 +08:00
change_debian_apt_sources() {
2022-12-17 20:16:08 +08:00
# Check if the IP is in China
ip=$(curl -s https://ipapi.co/ip)
location=$(curl -s https://ipapi.co/$ip/country_name)
# Backup current sources list
cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Determine Debian version
DEBIAN_VERSION=$(lsb_release -sr)
# Get the current system version
DEBIAN_VERSION=$(lsb_release -sr)
if [ "$location" = "China" ]; then
# IP is in China, update apt sources
echo "IP is in China, updating apt sources."
if [ "$DEBIAN_VERSION" = "6.0" ]; then
# Debian 6
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/debian/ squeeze main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ squeeze main non-free contrib
EOF
elif [ "$DEBIAN_VERSION" = "7.0" ]; then
# Debian 7
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/debian/ wheezy main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ wheezy main non-free contrib
EOF
elif [ "$DEBIAN_VERSION" = "8.0" ]; then
# Debian 8
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib
EOF
elif [ "$DEBIAN_VERSION" = "9.0" ]; then
# Debian 9
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
EOF
elif [ "$DEBIAN_VERSION" = "10.0" ]; then
# Debian 10
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
EOF
elif [ "$DEBIAN_VERSION" = "11.0" ]; then
# Debian 11
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
EOF
fi
else
# IP is not in China, update apt sources
echo "IP is not in China, updating apt sources."
# Use official sources list for Debian 6
if [[ $DEBIAN_VERSION == 6 ]]; then
cat > /etc/apt/sources.list <<EOF
deb http://deb.debian.org/debian squeeze main contrib non-free
deb-src http://deb.debian.org/debian squeeze main contrib non-free
deb http://deb.debian.org/debian squeeze-updates main contrib non-free
deb-src http://deb.debian.org/debian squeeze-updates main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
EOF
# Use official sources list for Debian 7
elif [[ $DEBIAN_VERSION == 7 ]]; then
cat > /etc/apt/sources.list <<EOF
deb http://deb.debian.org/debian wheezy main contrib non-free
deb-src http://deb.debian.org/debian wheezy main contrib non-free
deb http://deb.debian.org/debian wheezy-updates main contrib non-free
deb-src http://deb.debian.org/debian wheezy-updates main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
EOF
# Use official sources list for Debian 8
elif [[ $DEBIAN_VERSION == 8 ]]; then
cat > /etc/apt/sources.list <<EOF
deb http://deb.debian.org/debian jessie main contrib non-free
deb-src http://deb.debian.org/debian jessie main contrib non-free
deb http://deb.debian.org/debian jessie-updates main contrib non-free
deb-src http://deb.debian.org/debian jessie-updates main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
EOF
# Use official sources list for Debian 9
elif [[ $DEBIAN_VERSION == 9 ]]; then
cat > /etc/apt/sources.list <<EOF
deb http://deb.debian.org/debian stretch main contrib non-free
deb-src http://deb.debian.org/debian stretch main contrib non-free
deb http://deb.debian.org/debian stretch-updates main contrib non-free
deb-src http://deb.debian.org/debian stretch-updates main contrib non-free
deb http://security.debian.org/ stretch/updates main contrib non-free
deb-src http://security.debian.org/ stretch/updates main contrib non-free
EOF
# Use official sources list for Debian 10
elif [[ $DEBIAN_VERSION == 10 ]]; then
cat > /etc/apt/sources.list <<EOF
deb http://deb.debian.org/debian buster main contrib non-free
deb-src http://deb.debian.org/debian buster main contrib non-free
deb http://deb.debian.org/debian buster-updates main contrib non-free
deb-src http://deb.debian.org/debian buster-updates main contrib non-free
deb http://security.debian.org/ buster/updates main contrib non-free
deb-src http://security.debian.org/ buster/updates main contrib non-free
EOF
# Use official sources list for Debian 11
elif [[ $DEBIAN_VERSION == 11 ]]; then
cat > /etc/apt/sources.list <<EOF
deb http://deb.debian.org/debian bullseye main contrib non-free
deb-src http://deb.debian.org/debian bullseye main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free
deb http://security.debian.org/ bullseye/updates main contrib non-free
deb-src http://security.debian.org/ bullseye/updates main contrib non-free
EOF
fi
fi
2022-12-16 11:31:35 +08:00
}
2022-12-17 20:16:08 +08:00
2022-12-17 20:21:19 +08:00
change_ubuntu_apt_sources() {
2022-12-16 11:25:28 +08:00
# Check the system's Ubuntu version
ubuntu_version=$(lsb_release -r | awk '{print $2}')
if [ "$ubuntu_version" = "12.04" ]; then
# Backup the current sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Write the Ubuntu 12.04 apt sources list that can be used with apt to sources.list
echo "deb http://old-releases.ubuntu.com/ubuntu precise main restricted universe multiverse" | sudo tee /etc/apt/sources.list
echo "deb http://old-releases.ubuntu.com/ubuntu precise-security main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://old-releases.ubuntu.com/ubuntu precise-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
elif [ "$ubuntu_version" = "14.04" ]; then
# Backup the current sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Write the standard Ubuntu 14.04 apt sources list to sources.list
echo "deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" | sudo tee /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
elif [ "$ubuntu_version" = "16.04" ]; then
# Backup the current sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Write the standard Ubuntu 16.04 apt sources list to sources.list
echo "deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" | sudo tee /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
elif [ "$ubuntu_version" = "18.04" ]; then
# Backup the current sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Write the standard Ubuntu 18.04 apt sources list to sources.list
echo "deb http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse" | sudo tee /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu bionic-security main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu bionic-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
elif [ "$ubuntu_version" = "20.04" ]; then
# Backup the current sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Write the standard Ubuntu 20.04 apt sources list to sources.list
echo "deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse" | sudo tee /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu focal-security main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu focal-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
elif [ "$ubuntu_version" = "22.04" ]; then
# Backup the current sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Write the standard Ubuntu 22.04 apt sources list to sources.list
echo "deb http://archive.ubuntu.com/ubuntu hirsute main restricted universe multiverse" | sudo tee /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu hirsute-security main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu hirsute-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu hirsute-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
else
echo "The system is not Ubuntu 12/14/16/18/20/22 . No changes were made to the apt sources."
fi
2022-12-16 11:31:35 +08:00
##############################################################################################################################################
2022-12-16 11:25:28 +08:00
2022-12-16 10:46:05 +08:00
sudo apt update
if [ $? -ne 0 ]; then
echo "The update failed. Attempting to unlock the apt sources..."
if [ -f /etc/debian_version ]; then
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
elif [ -f /etc/lsb-release ]; then
sudo rm /var/lib/dpkg/lock
sudo rm /var/cache/apt/archives/lock
fi
sudo apt update
if [ $? -ne 0 ]; then
echo "The update still failed. Attempting to fix missing GPG keys..."
if [ -f /etc/debian_version ]; then
sudo apt-key update
elif [ -f /etc/lsb-release ]; then
echo "try sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys missing key"
fi
fi
2022-12-16 10:34:57 +08:00
fi
# Update the package list to pick up the new sources
sudo apt update
2022-12-16 10:46:05 +08:00
# Check the exit status of the update command
if [ $? -ne 0 ]; then
# Print a message indicating that the update failed
echo "The update failed. Attempting to replace the apt sources..."
# Check if the system is Debian or Ubuntu
if [ -f /etc/debian_version ]; then
# Replace the current apt sources list with the one at the specified URL
2022-12-16 11:31:35 +08:00
#sudo curl -o /etc/apt/sources.list https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/debian.txt
# 获取系统版本
release=$(lsb_release -cs)
# 获取源列表中的版本
sources_release=$(grep "^deb" /etc/apt/sources.list | head -n1 | cut -d' ' -f3)
# 如果版本不同,则执行 change_debian_apt_sources 函数
if [ "$release" != "$sources_release" ]; then
2022-12-17 20:19:46 +08:00
echo "debian source is wrong"
fi
# Display prompt asking whether to proceed with updating
read -p "Do you want to proceed with updating? [y/n] " -n 1 updating
echo ""
# Check user's input and exit if they do not want to proceed
if [ "$updating" != "y" ]; then
exit 0
else
2022-12-16 11:31:35 +08:00
change_debian_apt_sources
fi
2022-12-16 10:46:05 +08:00
elif [ -f /etc/lsb-release ]; then
# Replace the current apt sources list with the one at the specified URL
2022-12-16 11:25:28 +08:00
# sudo curl -o /etc/apt/sources.list https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/ubuntu.txt
# 获取系统版本
release=$(lsb_release -cs)
# 获取源列表中的版本
sources_release=$(grep "^deb" /etc/apt/sources.list | head -n1 | cut -d' ' -f3)
# 如果版本不同,则执行 change_apt_sources 函数
if [ "$release" != "$sources_release" ]; then
2022-12-17 20:19:46 +08:00
echo "ubuntu source is wrong"
fi
# Display prompt asking whether to proceed with updating
read -p "Do you want to proceed with updating? [y/n] " -n 1 updating
echo ""
# Check user's input and exit if they do not want to proceed
if [ "$updating" != "y" ]; then
exit 0
else
2022-12-16 11:25:28 +08:00
change_ubuntu_apt_sources
fi
2022-12-16 10:46:05 +08:00
else
# Print a message indicating that the system is not supported
echo "This system is not supported. The apt sources will not be modified."
fi
2022-12-17 21:08:07 +08:00
# Update the package list again to pick up the new sources
sudo apt update
2022-12-17 20:31:46 +08:00
2022-12-17 21:11:34 +08:00
# Check the exit status of the update command
if [ $? -eq 0 ]; then
# Print a message indicating that the update was successful
echo "The update was successful."
2022-12-17 21:08:07 +08:00
else
2022-12-17 21:11:34 +08:00
# Print a message indicating that the update failed and suggest other error resolution methods
echo "The update failed. You may want to try the following error resolution methods:
- Check your internet connection
- Check the sources list for errors
- Check for package dependencies
- Check for disk space issues"
2022-12-17 21:08:07 +08:00
fi
2022-12-16 10:46:05 +08:00
fi