понизьте ppa пакеты до версий, доступных в предыдущем моменте времени

Предыстория - то, что нормальные драйверы Intel GPU не делают различных расширений OpenGL, которые хотят мое кодирование хобби и некоторые игры. Таким образом, я должен установить обрезные станки Xorg и затем его счастливое. Однако в прошлую среду или таким образом, было обновление обрезных станков Xorg - большого количества пакетов - и оно повредилось плохо; драйверы запираются и берут целый компьютер с ними; жесткая перезагрузка требуется.

Таким образом, как можно понизить - избранные версии пакета в PPA, которые представляют точку, в прошлом игнорирующую версии, более новые, чем это?

14
задан 27 June 2011 в 14:12

4 ответа

Используя обрезные станки Xorg ppa для ежедневной работы могла быть довольно плохая идея.

Это может давать Вам последние драйверы, верные, но можно также получить не рабочие драйверы.

Чтобы удалить PPA и понизить пакеты, замененные им (настолько возвращающийся к тем доступным на официальных репозиториях), сначала установите ppa-чистку:

sudo apt-get install ppa-purge

И затем удалите PPA, понизив корректно до официальных пакетов:

sudo ppa-purge ppaname

Это должно понизить Ваши пакеты назад до официальных.

Другие пакеты, которые были в PPA, но не в официальных репозиториях, не будут удалены. Необходимо вручную сказать диспетчеру пакетов удалять их, например, с помощью склонного:

sudo apt-get purge packagename

Можно найти название рассмотрения ppa раздела "Software Sources" Настроек Ubuntu и видеть список пакетов, которые это обеспечивает на его странице панели запуска (или рассмотрение раздела "Origin" Синаптического Диспетчера пакетов, если установлено).

17
ответ дан 23 November 2019 в 03:00

В будущем, если Вы используете синаптический (принятие Вас может загрузиться в X) можно выбрать из доступных версий путем выделения пакета, который будет изменен и затем выбора 'версии силы' из меню. Оттуда необходимо смочь понизить.

0
ответ дан 23 November 2019 в 03:00

[Исходный Плакат]

Не имея большой забавы, я записал сценарий, чтобы вычислить различие и выполнить команду восстановления; было приблизительно 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))
0
ответ дан 23 November 2019 в 03:00

У меня была та же проблема сегодня, я заметил, что ~2 недели назад установил обновления своей системы и все еще имел ubuntu-x-swat ppa, включил, который имел новый драйвер Nvidia. Старый был прекрасен, новый повредил мою систему (незначительно, это взяло меня некоторое время для замечания).

Таким образом, я смотрел в /var/log/apt/history.log для нахождения предыдущего номера версии пакета драйвера Nvidia, который я установил и затем попытался найти пакет в/var/cache/apt/archives, где Вы будете обычно находить все пакеты загруженными Кв., но это не было там. И 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
    

    Патчи debian, которые делают buildable пакет из tarball:

    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 странице Вы найдете разность от предыдущей версии пакета до той, которая Вы смотрите на под разделом "Available Diffs".

    Для меня, который был:

    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
     [...]
    
2
ответ дан 23 November 2019 в 03:00

Другие вопросы по тегам:

Похожие вопросы: