升级后重新启用 PPA/repos 的最佳方法是什么?

升级后重新启用 PPA/repos 的最佳方法是什么?

当我从 11.10 升级到 12.04 时,重新启用我的 PPA 和添加的存储库的最佳方法是什么?

答案1

您需要通过取消注释目录中的文件中的各个行来将它们全部添加回来/单独重新启用它们/etc/apt/sources.list.d/

但是,如果您只是使用 PPA 来获取软件包的较新版本,那么升级时间是重新评估您是否需要 PPA 的好时机。

答案2

sources.list.d我编写了一个 bash 脚本,从升级期间被禁用的所有文件中删除前导井号字符。

以下代码用于将raring源升级到saucy

如果要保留后缀# disabled on upgrade to ...,请使用

for f in /etc/apt/sources.list.d/*.list; do sudo sed -i 's/raring/saucy/g' $f; sudo sed -i 's/^# \(.*disabled on upgrade to.*\)/\1/g' $f;done

如果要删除后缀# disabled on upgrade to ...,请使用

for f in /etc/apt/sources.list.d/*.list; do sudo sed -i 's/raring/saucy/g' $f; sudo sed -i 's/^# \(.*\) # disabled on upgrade to.*/\1/g' $f;done

答案3

下面是一个 Python 脚本,它使用 Python APT API 来查找并启用此类源,同时将发布版本设置为当前版本:

#! /usr/bin/python3

import aptsources.sourceslist as sl
import lsb_release

codename = lsb_release.get_distro_information()['CODENAME']
sources = sl.SourcesList()

for source in sources.list:
    if source.comment.lower().find("disabled on upgrade") >= 0:
        source.dist = codename
        source.set_enabled(True)
        print(source)
sources.save()

如果您不使用 运行它sudo,它将无法保存更改,但它将显示哪些源将被启用。使用 运行以sudo保存更改。

答案4

检查并自动更新源列表文件,我使用curl和创建了一个脚本codename,如下所示。

#!/bin/bash

CODENAME="$(lsb_release -cs)"

for file in /etc/apt/sources.list.d/*.list; 
   do
      APT_URL="$(cat $file | grep -Eo '(http|https)://[a-zA-Z0-9./?=_-]*' | sort | uniq)"
      CURRENT_CODES="$(cat $file | rev | awk '{NF=2}1' | rev | awk '{print $1;}')"
      LENGTH=${#APT_URL}
      [[ ${APT_URL:LENGTH-1:1} != */ ]] && APT_URL="$APT_URL/"; :
      NEW_APT_URL="${APT_URL}dists/${CODENAME}"
      echo -n "$NEW_APT_URL"
      STATUS=$(curl --head --location --write-out %{http_code} --silent --output /dev/null ${NEW_APT_URL})
      if [[ $STATUS == 200 ]]; then
         echo -en "\e[93m OK\033[0m"
         for code in $CURRENT_CODES;
            do
               [[ $code != $CODENAME ]] && sudo sed -i "s/$code/$CODENAME/g" $file
         done;
         sudo sed -i 's/^# \(.*\) # disabled on upgrade to.*/\1/g' $file
         echo -e "\e[92m DONE\033[0m"
      else
         echo -e "\e[91m NOT FOUND\033[0m"
      fi
done;

相关内容