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

Как уже упоминалось, вы можете использовать пробел перед вашей командой, но это зависит от переменной HISTCONTROL. Вот несколько альтернатив -

Вы можете сказать терминалу прекратить запись и начать запись истории. Это можно сделать с помощью этих команд -

set +o history      #stop recording history
set -o history      #start recording history

Если вы уже запустили некоторые команды и забыли остановить запись или использовать пробел, вы все равно можете остановить ее от записи до .bash_history, пока сеанс по-прежнему открыт. Он записывается в файл при закрытии сеанса терминала. Таким образом, вы можете удалить текущую историю сеанса непосредственно перед закрытием сеанса (до выхода из su в вашем случае). Это можно сделать с помощью этой команды -

history -c

Крайним вариантом было бы убить терминальный процесс, когда вы закончите выполнение всех команд. Вы действительно убиваете процесс, прежде чем он сможет записать историю в файл.

kill -9 $$

$$ выдаст текущий идентификатор процесса терминала, а kill -9 убьет этот процесс.

14
задан 28 June 2011 в 02:12

36 ответов

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

Итак, я заглянул в /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 Патчи debian, которые делают встроенный пакет из tarball: nvidia-graphics-drivers_290.10-0ubuntu1 ~ lucid ~ xup1.diff.gz
  • Извлеките где-то желательно в новом и пустом каталоге, затем примените патчи к исходному дереву ~ / nvidia & gt; tar xvzf nvidia-graphics-drivers_290.10.orig.tar.gz [...] ~ / nvidia & gt; gzip -d nvidia-graphics-drivers_290.10-0ubuntu1 \ ~ lucid \ ~ xup1.diff.gz ~ / nvidia & gt; patch -p0 & lt; nvidia-graphics-drivers_290.10-0ubuntu1 \ ~ lucid \ ~ xup1.diff [...] Вы не должны получать какие-либо отброшенные куски при патче.
  • На той же странице ppa, вы найдете отличие от предыдущей версии пакета до той, которую вы смотрите, в разделе «Доступные различия». Для меня это было: diff от 285.05.09-0ubuntu1 ~ lucid ~ xup1 до 290.10-0ubuntu1 ~ lucid ~ xup1
  • Загрузите это, извлеките и отмените применить его к исправленному оригиналу источники: ~ / nvidia & gt; gzip -d nvidia-graphics-drivers_285.05.09-0ubuntu1 \ ~ lucid \ ~ xup1_290.10-0ubuntu1 \ ~ lucid \ ~ xup1.diff.gz ~ / nvidia & gt; patch -R-p0 & lt; nvidia-settings_285.05.09-0ubuntu1 \ ~ lucid \ ~ xup1_290.10-0ubuntu1 \ ~ lucid \ ~ xup1.diff [...]
  • Presto! Теперь у вас должно быть дерево исходных данных предыдущей версии, готовое для сборки пакета: ~ / nvidia & gt; mv nvidia-settings-290.10 / nvidia-settings-285.05.09 ~ / nvidia & gt; cd nvidia-settings-285.05.09 / ~ / n / nvidia-settings-285.05.09 & gt; dpkg-buildpackage
  • Что должно дать вам пакет предыдущей версии, который можно установить с помощью dpkg: ~ / n / nvidia-settings-285.05.09 & gt; cd .. ~ / nvidia & gt; sudo dpkg -i nvidia-current_285.05.09-0ubuntu1 \ ~ lucid \ ~ xup1_amd64.deb [...]
2
ответ дан 10 August 2018 в 09:32

Использование xorg-edgers ppa для повседневной работы может быть довольно плохой идеей.

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

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

  sudo apt-get install ppa-purge [  ! d0] 

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

  sudo ppa-purge ppaname  

Это должно верните свои пакеты обратно на официальные.

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

  sudo apt-get purge packagename  

Вы можете найти имя ppa, посмотрев раздел «Источники программного обеспечения» в настройках Ubuntu и просмотрите список пакетов, которые он предоставляет на своей странице запуска (или посмотрите раздел «Происхождение» диспетчера пакетов Synaptic, если он установлен).

16
ответ дан 10 August 2018 в 09:32

[Original Poster]

Не очень весело, я написал сценарий для вычисления разницы и выполнения команды restore; было задействовано около 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 "), если не args: raise Exception (" дата не указана ")  elif len (args) == 1: args.append ("00:00:00") # default time elif len (args)! = 2: raise Exception ("неожиданные аргументы") snapshot = datetime.strptime ("".  join (args), datefmt) для opt, _ in opts: if opt == "-y": dry_run = False else: raise Exception ("неподдерживаемая опция% s"% opt), за исключением исключения: e: print "error:"  , e print "usage:", sys.argv [0], "[flags] YYYY-MM-DD [HH: MM: SS]" print "flags: -y = для реального, не просто покажите это,  восстановить его "sys.exit (1) # определить, что делать history = {} restore = set () remove = set () с open (" / var / log / dpkg.log "," r ") в качестве журнала:  для строки в журнале: дата, время, действие, строка = строка.split (нет, 3), когда = datetime.strptime ("% s% s"% (дата, время), datefmt) package, ver = line.strip (  )  .split (None, 1), если при & lt; = моментальный снимок: если действие включено ("upgrade", "install"): prev_ver, new_ver = ver.split () history [package] = new_ver elif action == "remove":  если пакет в истории: del history [package] else: print "(не удается удалить% s)"% line else: if action == "install": remove.add (package) elif action == "upgrade": если пакет в  history: restore.add (пакет) elif package not in remove: print "(не может вернуть% s)"% line elif action == "remove": если пакет в истории: restore.add (package) elif package in remove: remove  .remove (package) else: print "(не может отменить% s)"% line # показать, что делать для пакета при восстановлении: напечатать "restore", package, history [package] для пакета в remove: print "remove", package  # сделать это, если не dry_run: print "======" def execute (cmd): print cmd os.system (cmd) #execute ("apt-get remove" + "" .join (удалить)) выполнить (  "apt-get install" + "" .join ("% s =% s"% (package, history [package]) для восстановления пакета))  
0
ответ дан 13 August 2018 в 15:42
  • 1
    Бедный ты. Знаете ли вы, что история установки доступна только в /var/log/apt/history.log ? – Lekensteyn 28 June 2011 в 02:13
  • 2
    dpkg.log - это та же информация, но также и другие приложения, кроме apt. – Will 28 June 2011 в 02:15
  • 3
    Какие другие приложения используют dpkg прямо? Synaptic является интерфейсом apt-get . – Lekensteyn 28 June 2011 в 02:21
  • 4
    пользователь может напрямую использовать dpkg; пользователь может также использовать gdebi или какой-либо другой инструмент. Мне пришлось выбрать файл для разбора, поэтому я выбрал один правильный файл - dpkg.log. Случается, что я использую apt исключительно, но с той же разницей. – Will 28 June 2011 в 02:30

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

0
ответ дан 13 August 2018 в 15:42

Использование xorg-edgers ppa для повседневной работы может быть довольно плохой идеей.

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

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

  sudo apt-get install ppa-purge [  ! d0] 

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

  sudo ppa-purge ppaname  

Это должно верните свои пакеты обратно на официальные.

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

  sudo apt-get purge packagename  

Вы можете найти имя ppa, посмотрев раздел «Источники программного обеспечения» в настройках Ubuntu и просмотрите список пакетов, которые он предоставляет на своей странице запуска (или посмотрите раздел «Происхождение» диспетчера пакетов Synaptic, если он установлен).

16
ответ дан 13 August 2018 в 15:42
  • 1
    Как я уже сказал, обычные драйверы не работают для меня. Мне нужны xorg-edgers. Я просто хочу обойти самую последнюю версию своих драйверов. – Will 28 June 2011 в 00:47
  • 2
    десять в следующий раз, когда вы используете xorg edgers ppa (и работает), просто отключите ppa и придерживайтесь этих версий пакета – xangua 5 July 2011 в 00:24
  • 3
    sudo ppa-purge ppa: someppa / ppa – DmitrySandalov 22 December 2014 в 19:25
  • 4
    он удаляет все в моем случае – noone 2 November 2017 в 00:15

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

Итак, я заглянул в /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 Патчи debian, которые делают встроенный пакет из tarball: nvidia-graphics-drivers_290.10-0ubuntu1 ~ lucid ~ xup1.diff.gz
  • Извлеките где-то желательно в новом и пустом каталоге, затем примените патчи к исходному дереву ~ / nvidia & gt; tar xvzf nvidia-graphics-drivers_290.10.orig.tar.gz [...] ~ / nvidia & gt; gzip -d nvidia-graphics-drivers_290.10-0ubuntu1 \ ~ lucid \ ~ xup1.diff.gz ~ / nvidia & gt; patch -p0 & lt; nvidia-graphics-drivers_290.10-0ubuntu1 \ ~ lucid \ ~ xup1.diff [...] Вы не должны получать какие-либо отброшенные куски при патче.
  • На той же странице ppa, вы найдете отличие от предыдущей версии пакета до той, которую вы смотрите, в разделе «Доступные различия». Для меня это было: diff от 285.05.09-0ubuntu1 ~ lucid ~ xup1 до 290.10-0ubuntu1 ~ lucid ~ xup1
  • Загрузите это, извлеките и отмените применить его к исправленному оригиналу источники: ~ / nvidia & gt; gzip -d nvidia-graphics-drivers_285.05.09-0ubuntu1 \ ~ lucid \ ~ xup1_290.10-0ubuntu1 \ ~ lucid \ ~ xup1.diff.gz ~ / nvidia & gt; patch -R-p0 & lt; nvidia-settings_285.05.09-0ubuntu1 \ ~ lucid \ ~ xup1_290.10-0ubuntu1 \ ~ lucid \ ~ xup1.diff [...]
  • Presto! Теперь у вас должно быть дерево исходных данных предыдущей версии, готовое для сборки пакета: ~ / nvidia & gt; mv nvidia-settings-290.10 / nvidia-settings-285.05.09 ~ / nvidia & gt; cd nvidia-settings-285.05.09 / ~ / n / nvidia-settings-285.05.09 & gt; dpkg-buildpackage
  • Что должно дать вам пакет предыдущей версии, который можно установить с помощью dpkg: ~ / n / nvidia-settings-285.05.09 & gt; cd .. ~ / nvidia & gt; sudo dpkg -i nvidia-current_285.05.09-0ubuntu1 \ ~ lucid \ ~ xup1_amd64.deb [...]
2
ответ дан 13 August 2018 в 15:42

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

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