ppaパッケージを前の時点で利用可能なバージョンにダウングレードします


14

裏話として、通常のIntel GPUドライバーは、趣味のコーディングや一部のゲームで必要なさまざまなOpenGL拡張機能を実行しません。したがって、xorg-edgersをインストールする必要があります。しかし、先週の水曜日かそこらで、xorg-edgersの更新(多くのパッケージ)があり、ひどく壊れました。ドライバーはロックアップし、コンピューター全体を持ち込みます。ハードリセットが必要です。

それでは、どのようにダウングレードできますか?PPAで過去のポイントを表すパッケージバージョンを選択し、それより新しいバージョンを無視しますか?

回答:


17

xorg-edgers ppaを日常業務に使用するのは、かなり悪い考えです。

最新のドライバーが提供される場合もありますが、機能しないドライバーを取得することもできます。

PPAを削除し、それに置き換えられたパッケージをダウングレードするには(公式リポジトリで利用可能なパッケージに戻るため)、最初にppa-purgeをインストールします。

sudo apt-get install ppa-purge

次に、PPAを削除し、公式パッケージに適切にダウングレードします。

sudo ppa-purge ppaname

これにより、パッケージがダウングレードされて公式のものに戻ります。

PPAに含まれていたが、公式リポジトリに含まれていなかった他のパッケージはアンインストールされません。たとえば、aptを使用して、パッケージマネージャーに削除するよう手動で指示する必要があります。

sudo apt-get purge packagename

Ubuntu Settingsの「Software Sources」セクションを見ると、ppaの名前を見つけることができ、ランチパッドページで提供されるパッケージのリストを見ることができます(または、Synaptic Package Managerの「Origin」セクションを見る(インストールされている場合))。


1
私が言ったように、通常のドライバーは私には機能しません。xorg-edgersが必要です。ドライバーの最新バージョンを避けたいだけです。
ウィル

次回xorg edgers ppaを使用する(そして機能する)ときは、単にppaを無効にして、それらのパッケージバージョンに固執します
xangua

2
sudo ppa-purge ppa:someppa/ppa
DmitrySandalov

それは私の場合にはeveryting削除
誰も

2

今日も同じ問題がありました。2週間前にシステムにアップデートをインストールし、新しいnvidiaドライバーを備えたubuntu-x-swat ppaが有効になっていることに気付きました。古いものは大丈夫でしたが、新しいものは私のシステムを壊しました(ほんの少し、気づくまでに少し時間がかかりました)。

そこで、/ var / log / apt / history.logを調べて、インストールしたnvidiaドライバーパッケージの以前のバージョン番号を見つけ、通常は/ var / cache / apt / archivesでパッケージを見つけようとしました。 aptによってダウンロードされたすべてのパッケージを検索しますが、そこにはありませんでした。そして、ppaは以前のバージョンのパッケージを新しいバージョンに置き換えると保持しませんので、そこからも入手できませんでした。

ただし、以前のパッケージバージョンから新しいバージョンへの差分はすべてのバージョンのppaに保持され、元のtarballおよびそのdebianパッチと共に、新しいバージョンのすべての変更を元に戻し、前のバージョンのソースを取得することができます。

必要な手順を簡単に説明します。

  • ppaに移動して、最新のパッケージバージョンを見つけ、元のtarballと(オプションの)debianパッチをダウンロードします。私の場合、それらはそのページで見つかりました。

    https://launchpad.net/~ubuntu-x-swat/+archive/x-updates/+sourcepub/2087970/+listing-archive-extra
    

    元のtarballの名前は次のとおりです。

    nvidia-graphics-drivers_290.10.orig.tar.gz
    

    tarballからビルド可能なパッケージを作成するdebianパッチは次のとおりです。

    nvidia-graphics-drivers_290.10-0ubuntu1~lucid~xup1.diff.gz
    
  • できれば新しい空のディレクトリのどこかにそれらを抽出し、ソースツリーにパッチを適用します

    ~/nvidia> tar xvzf nvidia-graphics-drivers_290.10.orig.tar.gz
    [...]
    ~/nvidia> gzip -d nvidia-graphics-drivers_290.10-0ubuntu1\~lucid\~xup1.diff.gz
    ~/nvidia> patch -p0 < nvidia-graphics-drivers_290.10-0ubuntu1\~lucid\~xup1.diff
    [...]
    

    パッチを適用するときに、拒否されたチャンクを取得しないでください。

  • 同じPPAページで、「使用可能な差分」セクションの下に、以前のパッケージバージョンから現在のバージョンへの差分が表示されます。

    私にとっては:

    diff from 285.05.09-0ubuntu1~lucid~xup1 to 290.10-0ubuntu1~lucid~xup1
    
  • それをダウンロードし、抽出し、パッチを当てた元のソースに適用します。

    ~/nvidia> gzip -d nvidia-graphics-drivers_285.05.09-0ubuntu1\~lucid\~xup1_290.10-0ubuntu1\~lucid\~xup1.diff.gz
    ~/nvidia> patch -R -p0 < nvidia-settings_285.05.09-0ubuntu1\~lucid\~xup1_290.10-0ubuntu1\~lucid\~xup1.diff
    [...]
    
  • プレスト!これで、以前のバージョンのソースツリーでパッケージをビルドする準備ができました。

    ~/nvidia> mv nvidia-settings-290.10/ nvidia-settings-285.05.09
    ~/nvidia> cd nvidia-settings-285.05.09/
    ~/n/nvidia-settings-285.05.09> dpkg-buildpackage
    
  • これにより、dpkgでインストールできる以前のバージョンのパッケージが提供されます。

     ~/n/nvidia-settings-285.05.09> cd ..
     ~/nvidia> sudo dpkg -i nvidia-current_285.05.09-0ubuntu1\~lucid\~xup1_amd64.deb
     [...]
    

0

将来、シナプスを使用している場合(Xで起動できると仮定)、変更するパッケージを強調表示し、メニューから「バージョンを強制する」を選択して、利用可能なバージョンから選択できます。そこからダウングレードできるはずです。


0

[オリジナルポスター]

あまり面白くないので、違いを計算して復元コマンドを実行するスクリプトを書きました。約100個のパッケージが関係していました。悲しいことに、多くのパッケージが利用できなくなったため、ダウングレードに失敗しました:(

#!/usr/bin/env python

import sys, getopt, os
from datetime import datetime
datefmt = "%Y-%m-%d %H:%M:%S"

dry_run = True
try:
    opts,args = getopt.getopt(sys.argv[1:],"y")
    if not args:
        raise Exception("no date specified")
    elif len(args) == 1:
        args.append("00:00:00") # default time
    elif len(args) != 2:
        raise Exception("unexpected arguments")
    snapshot = datetime.strptime(" ".join(args),datefmt)
    for opt,_ in opts:
        if opt == "-y":
            dry_run = False
        else:
            raise Exception("unsupported option %s"%opt)
except Exception as e:
    print "error:",e
    print "usage:",sys.argv[0],"[flags] YYYY-MM-DD [HH:MM:SS]"
    print "flags: -y = for real; don\'t just show it, restore it"
    sys.exit(1)

# work out what to do
history = {}
restore = set()
remove = set()
with open("/var/log/dpkg.log","r") as log:
    for line in log:
        date,time,action,line = line.split(None,3)       
        when = datetime.strptime("%s %s"%(date,time),datefmt)
        package,ver = line.strip().split(None,1)
        if when <= snapshot:
            if action in ("upgrade","install"):
                prev_ver,new_ver = ver.split()
                history[package] = new_ver
            elif action == "remove":
                if package in history:
                    del history[package]
                else:
                    print "(cannot remove %s)"%line
        else:
            if action == "install":
                remove.add(package)
            elif action == "upgrade":
                if package in history:
                    restore.add(package)
                elif package not in remove:
                    print "(cannot revert %s)"%line
            elif action == "remove":
                if package in history:
                    restore.add(package)
                elif package in remove:
                    remove.remove(package)
                else:
                    print "(cannot revert %s)"%line

# show what to do
for package in restore:
    print "restore",package,history[package]
for package in remove:
    print "remove",package

# do it
if not dry_run:
    print "======"
    def execute(cmd):
        print cmd
        os.system(cmd)
    #execute("apt-get remove "+" ".join(remove))
    execute("apt-get install "+" ".join("%s=%s"%(package,history[package]) for package in restore))

かわいそう。インストール履歴はで利用できることをご存知/var/log/apt/history.logですか?
レーケンシュタイン

dpkg.logは同じ情報ですが、apt以外のアプリも含まれています。
ウィル

その場合、他にどのアプリがdpkg直接使用しますか?Synapticはのフロントエンドですapt-get
レケンステイン

ユーザーはdpkgを直接使用できます。ユーザーは代わりにgdebiまたは他のツールを使用することもできます。解析するファイルを選択する必要があったため、適切なファイルdpkg.logを選択しました。私はaptを排他的に使用しますが、同じ違いが起こります。
ウィル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.