当我从 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;