如何在添加 PPA 后永久禁用自动包缓存更新?

如何在添加 PPA 后永久禁用自动包缓存更新?

在 Ubuntu 的最新版本中,添加 PPA 会立即自动更新包缓存。

有时,我需要添加几个 PPA(例如在全新安装之后),并且希望apt update在添加所有 PPA 后一次性手动运行。

怎么做?

我发现问题,建议使用add-apt-repository -n ppa:user/repo

如何改变默认行为,以便即使-n没有提供标志,包缓存也不会被更新?

例如,在 Linux Mint 中,添加 PPA 后包缓存永远不会自动更新。如何使其成为 Ubuntu 中的默认行为?

答案1

对于特定用户,您可以为其添加别名add-apt-repository

将以下行添加到文件末尾~/.bashrc

alias sudo='sudo '
alias add-apt-repository='add-apt-repository -n'
alias apt-add-repository='add-apt-repository -n'

保存更改后,请不要忘记获取文件~/.bashrc

. ~/.bashrc

请记住,第一行是使用别名所必需的sudo。如果您有想要排除sudo使用的别名,这可能不是最好的方法。

答案2

对于系统范围的方法,我将创建本地包装脚本,/usr/local/bin如下所示

cat <<\EOF | sudo tee /usr/local/bin/add-apt-repository
#!/bin/bash
/usr/bin/add-apt-repository -n $@
EOF
sudo chmod +x /usr/local/bin/add-apt-repository

并且不要忘记apt-add-repository同义词命令 - 运行

sudo ln -s /usr/local/bin/add-apt-repository /usr/local/bin/apt-add-repository

-n然后使用任意带有自动添加选项的命令。

答案3

高级用户

您可以修改源代码来删除该apt update命令。

这是您需要从/usr/bin/add-apt-repository文件中删除的代码块:

        if update and not options.remove:
            os.execvp("apt-get", ["apt-get", "update"])
        sys.exit(0)

这将删除更新命令。

笔记:此代码在文件中出现两次,您必须删除最后一段。大多数文件中的此代码位于靠近198号线。

您可以使用文本编辑器打开该文件nano并删除这段代码。

您还可以稍微修改代码,例如:

        if update and not options.remove:
            os.execvp("apt-get", ["apt-get", "moo"])
        sys.exit(0)

笔记:使用终端文本编辑器来编辑此文件,nano而不是使用 GUI 编辑器gedit

初学者

Ctrl使用+ Alt+打开终端T

  1. 首先,安装 nano:

    sudo apt update
    sudo apt install nano
    
  2. 编辑文件:

    sudo nano /usr/bin/add-apt-repository
    
  3. 反复按向下箭头键,除非到达文件末尾。

  4. 你会发现一个if与此完全相同的语句:

            if update and not options.remove:
                os.execvp("apt-get", ["apt-get", "update"])
            sys.exit(0)   
    
  5. 删除上面提到的整个if代码块。

  6. Ctrl+ X,然后选择Y并按ENTER

测试

测试

恢复文件

弄乱?

不用担心!如果我们运行dpkg -S该文件,我们可以看到:

$ dpkg -S /usr/bin/add-apt-repository 
software-properties-common: /usr/bin/add-apt-repository

因此只需运行:

sudo apt update
sudo cp -r /usr/bin/add-apt-repository /tmp
sudo rm -rf /usr/bin/add-apt-repository
sudo apt install software-properties-common --reinstall

相关内容