软件包及镜像源管理

软件包及镜像源管理#

升级软件#

automake 为例,升级到 1.16.5。

#!/bin/bash

# run as root only
if [[ $EUID -ne 0 ]] ; then
    echo -e "\e[1;39m[   \e[31mError\e[39m   ] need root access to run this script\e[0;39m"
    exit 1
fi

function install_automake() {
    [ $# -eq 0 ] && { run_error "Usage: install_automake <version>"; exit; }
    local VERSION=${1}
    wget ftp://ftp.gnu.org/gnu/automake/automake-${VERSION}.tar.gz &> /dev/null
    if [ -f "automake-${VERSION}.tar.gz" ]; then
            tar -xzf automake-${VERSION}.tar.gz
            cd automake-${VERSION}/
            ./configure
            make && make install
            echo -e "\e[1;39m[   \e[1;32mOK\e[39m   ] automake-${VERSION} installed\e[0;39m"

        else
            echo -e "\e[1;39m[   \e[31mError\e[39m   ] cannot fetch file from ftp://ftp.gnu.org/gnu/automake/ \e[0;39m"
            exit 1
    fi
}
install_automake 1.16.5

apt/yum 源#

软件包管理器 apt 和 yum 可以自动地下载、配置、安装、卸载自家的软件包,分别对应 .deb.rpm。软件包管理器会自动地处理软件包之间的依赖关系,给用户提供了极大方便。

(1) 以 Ubuntu 为例,更新镜像源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat <<EOF | sudo tee /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
EOF
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat <<EOF | sudo tee /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
EOF
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat <<EOF | sudo tee /etc/apt/sources.list
deb http://mirrors.cloud.tencent.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-updates main restricted universe multiverse
#deb http://mirrors.cloud.tencent.com/ubuntu/ focal-proposed main restricted universe multiverse
#deb http://mirrors.cloud.tencent.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal-updates main restricted universe multiverse
#deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal-proposed main restricted universe multiverse
#deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal-backports main restricted universe multiverse
EOF
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat <<EOF | sudo tee /etc/apt/sources.list
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
EOF
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat <<EOF | sudo tee /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.zju.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.zju.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.zju.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.zju.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.zju.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.zju.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.zju.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.zju.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.zju.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.zju.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
EOF
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat <<EOF | sudo tee /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
EOF
切换 Ubuntu 版本或找不到安装包

如要用于其他版本,把 focal 换成其他版本代号即可: 22.04:jammy;20.04:focal;18.04:bionic;16.04:xenial;14.04:trusty

若官方源找不到安装包,有两种方法可以解决这个问题:

  • https://pkgs.org/ 下载,手动安装:Ubuntu 用 dpkg 命令安装,CentOS 用 rpm 命令安装。

  • 从源代码的安装:

./configure --prefix=/path/to/install/
make
sudo make install

(2) 更新缓存

sudo apt-get clean all
sudo apt-get update

(3) 卸载软件

如果使用 apt 命令安装了软件,卸载软件的方式如下:

sudo apt-get remove <package_name>
sudo apt-get -y autoremove <package_name>
sudo apt-get -y purge <package_name>
sudo apt-get -y autoremove --purge <package_name>

pip 源#

pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。

(1) 永久切换镜像源

mkdir -p ~/.config/pip
cat <<EOF | tee ~/.config/pip/pip.conf
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
mkdir -p ~/.config/pip
cat <<EOF | tee ~/.config/pip/pip.conf
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
EOF
mkdir -p ~/.config/pip
cat <<EOF | tee ~/.config/pip/pip.conf
[global]
index-url=https://mirror.baidu.com/pypi/simple
[install]
trusted-host=mirror.baidu.com
EOF
mkdir -p ~/.config/pip
cat <<EOF | tee ~/.config/pip/pip.conf
[global]
index-url=https://mirrors.ustc.edu.cn/pypi/web/simple/
[install]
trusted-host=mirrors.ustc.edu.cn
EOF
mkdir -p ~/.config/pip
cat <<EOF | tee ~/.config/pip/pip.conf
[global]
index-url=https://pypi.doubanio.com/simple/
[install]
trusted-host=pypi.doubanio.com
EOF
mkdir -p ~/.config/pip
cat <<EOF | tee ~/.config/pip/pip.conf
[global]
index-url=https://pypi.python.org/pypi
[install]
trusted-host=pypi.python.org
EOF
New-Item -ItemType Directory -Path $HOME\pip -Force
$iniContent = @"
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
"@
$iniContent | Add-Content -Path ($HOME + "\pip\pip.ini") -PassThru | Out-Host
New-Item -ItemType Directory -Path $HOME\pip -Force
$iniContent = @"
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
"@
$iniContent | Add-Content -Path ($HOME + "\pip\pip.ini") -PassThru | Out-Host
New-Item -ItemType Directory -Path $HOME\pip -Force
$iniContent = @"
[global]
index-url=https://mirror.baidu.com/pypi/simple
[install]
trusted-host=mirror.baidu.com
"@
$iniContent | Add-Content -Path ($HOME + "\pip\pip.ini") -PassThru | Out-Host
New-Item -ItemType Directory -Path $HOME\pip -Force
$iniContent = @"
[global]
index-url=https://mirrors.ustc.edu.cn/pypi/web/simple/
[install]
trusted-host=mirrors.ustc.edu.cn
"@
$iniContent | Add-Content -Path ($HOME + "\pip\pip.ini") -PassThru | Out-Host
New-Item -ItemType Directory -Path $HOME\pip -Force
$iniContent = @"
[global]
index-url=https://pypi.doubanio.com/simple/
[install]
trusted-host=pypi.doubanio.com
"@
$iniContent | Add-Content -Path ($HOME + "\pip\pip.ini") -PassThru | Out-Host
New-Item -ItemType Directory -Path $HOME\pip -Force
$iniContent = @"
[global]
index-url=https://pypi.python.org/pypi
[install]
trusted-host=pypi.python.org
"@
$iniContent | Add-Content -Path ($HOME + "\pip\pip.ini") -PassThru | Out-Host

(2) requirements.txt

导出 requirements.txt 中列出的软件包,对应在本机上已经安装的版本号:

while IFS= read -r line || [[ -n $line ]]; do
    package=$(echo "$line" | awk -F '==' '{print $1}')
    required_version=$(echo "$line" | awk '{print $2}')
    installed_version=$(pip show "$package" 2>/dev/null | grep Version | awk -F': ' '{print $2}' | tr -d '[:space:]')
    if [[ -n "$installed_version" ]]; then
        echo "$package==$installed_version"
    else
        echo "$package is not installed."
    fi
done <requirements.txt

(3) 第三方镜像源

若官方源找不到安装包,从 https://pypi.org/ 下载版本后,使用下面的命令安装:

pip install /path/to/file.whl

(4) Conda 管理安装包

New-Item -ItemType Directory -Path $HOME\.condarc -Force
$iniContent = @"
channels:
    - defaults
show_channel_urls: true
default_channels:
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
    conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
"@
$iniContent | Add-Content -Path ($HOME + "\.condarc") -PassThru | Out-Host

Python 源#

使用 deadsnakes,可以在 Linux 上轻松地安装多个 Python 版本:

# 添加 PPA (Personal Package Archives) 源,此源可安装多个 Python 版本
sudo add-apt-repository ppa:deadsnakes/ppa

# 制定需要安装的 Python 版本号
PYTHON_VERSION=python3.13

# 安装另一个版本的 Python
sudo apt install $PYTHON_VERSION $PYTHON_VERSION-dev \
    $PYTHON_VERSION-venv $PYTHON_VERSION-distutils \
    $PYTHON_VERSION-lib2to3 $PYTHON_VERSION-gdbm \
    $PYTHON_VERSION-tk

# 使用新版本的 Python
mkdir -p ~/venv
$PYTHON_VERSION -m venv ~/venv/$PYTHON_VERSION --without-pip
source ~/venv/$PYTHON_VERSION/bin/activate
curl https://bootstrap.pypa.io/get-pip.py | $PYTHON_VERSION

MSYS2 源#

# modify config files
sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*

# verify the modification
head -n 6 /etc/pacman.d/mirrorlist.msys

# clear cache
pacman -Scc

# update mirrors
pacman -Sy
# modify config files
sed -i "s#mirror.msys2.org/#mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*

# verify the modification
head -n 6 /etc/pacman.d/mirrorlist.msys

# clear cache
pacman -Scc

# update mirrors
pacman -Syu

npm 源#

npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。 通过 npm 可以安装、共享、分发代码,管理项目依赖关系。默认源是 https://www.npmjs.com/

sudo apt install npm
sudo npm install n -g

# 设置淘宝镜像源
npm config set registry https://registry.npmmirror.com

升级或降级到指定版本的 npmnodejs

# 升级到最新版本
sudo npm install -g npm@latest
sudo n latest

# 降级到指定版本
sudo npm install npm@8.1.2 -g
sudo n v16.13.2

Maven 源#

如果使用 IDEA 默认的国外镜像源比较慢(会导致下载 Maven Wrapper 失败),可尝试使用国内镜像源:

编辑或新建 C:\Users\%USERNAME%\.m2\settings.xml,文件内容如下(使用阿里云镜像):