Установка пакета + зависимости и удаление их всех

В настоящее время я использую Xubuntu и собирался установить / попробовать GNOME Shell или Cinnamon, установив соответствующий метапакет. Однако в результате этого будет установлено огромное количество зависимостей, которые было бы практически невозможно удалить по отдельности на более позднем этапе, если бы я решил, что мне это не нравится. Поэтому мне интересно, есть ли способ, которым я могу отследить, какие пакеты Synaptic автоматически загружает как часть процесса, и создать какой-то сценарий, чтобы также удалить их все. Тогда я могу быть уверен, что если мне не понравится какая-либо из моих новых сред рабочего стола, я смогу удалить их полностью, не оставляя загрузки других приложений и библиотек.

Спасибо за любую помощь! :)

3
задан 21 October 2012 в 04:15

3 ответа

Вы можете использовать apt history log:

gedit /var/log/apt/history.log

и найти в журнале запись, когда вы впервые установили метапакет вашего рабочего стола env (Gnome-shell, Cinnamon, KDE ...). Вы найдете запись типа: apt-get install yourdesktopenv, за которой следуют все зависимости пакетов и их информацию об архивах.

Скопируйте всю запись и поместите ее в LibreOffice Writer, затем используйте поиск / замену с помощью регулярного выражения: :amd64 \([0-9\~\.\+a-zA-Z\-, ]*\),? Заменить на пустое место. (amd64 или i368 в зависимости от вашей системной арки) Эта операция замены заменит всю некоторую зависимость: amd64 (4.9.2-0ubuntu2, автоматический) на somepackage. В конце добавьте sudo apt-get remove --auto-remove к началу заменяемого текста. Скопируйте и вставьте в терминал.

Предупреждение : этот метод верен только в том случае, если вы не выполнили значительных обновлений между временем, когда вы впервые установили среду рабочего стола, и временем, когда вы хотите удалить его.


В идеале вы можете автоматизировать эти операции в bash-скрипте:

 #!/bin/bash

#This creepy & very small script extracts package strings from APT history log file.
#Tested in Ubuntu 12.10 Linux
#this script is not fully portable; ksh & zsh not supported.
#---------------------------------------------------------------------------------------
#@author= hanynowsky@gmail.com
#---------------------------------------------------------------------------------------
#Beware. This scripts supposes you installed the desktop environment only once. Besides if 
#you performed significant updates from the time when you installed it and the time when
# you want to remove it, there is a risk that you'd likely remove other dependency packages needed by other programs. 
#---------------------------------------------------------------------------------------
#REGEXMATCH=`grep -Po ':amd64 \([0-9\~\.\+a-zA-Z\-, ]*\),?'`
#APPENDCOM=`sed -i '1isudo apt-get remove --auto-remove ' ~/Desktop/removeENV.txt`
# or sed 's/\[[^]]*\]//g'    instead of perl -lpwe   | tee ~/Desktop/removeENV.txt`
# insert command: sed '/Install:/ i\sudo apt-get remove --auto-remove '
# ARCH=`dpkg --print-architecture`   ->  variable to get arch (amd64 or i386)
#---------------------------------------------------------------------------------------

# k = kde | g = gnome-shell | c = cinnamon | x = xcfe | l = lmde | o = openbox
echo "Uninstall Desktop-Environment : "
read -p "Enter letter ( k ) for KUBUNTU - ( g ) for GNOME-SHELL - ( x ) for XUBUNTU - ( l ) for LUBUNTU - ( o ) for openbox : " desk
if [ "$desk" = "k" ]; then DESKSTRING="kubuntu-desktop"
elif [ "$desk" = "g" ]; then DESKSTRING="gnome-shell";
elif [ "$desk" = "x" ]; then DESKSTRING="xubuntu-desktop";
elif [ "$desk" = "l" ]; then DESKSTRING="lubuntu-desktop";
elif [ "$desk" = "o" ]; then DESKSTRING="openbox";
else DESKSTRING="UNKNOWN-DESKTOP-ENV"; echo "Sorry $USER, operation is not valid for $DESKSTRING" ; echo "Aborted."; exit 0;
fi

ARCH=`dpkg --print-architecture`
APTLOGFILE="/var/log/apt/history.log"
WARNING="This will uninstall your desktop environment : $DESKSTRING . Enter 'y' to continue, or 'n' to abort. "
read -p "$WARNING" option
if [ "$option" = "y" ]; then FETCHCOM=`sed -n "/$DESKSTRING/{:a;n;/End-Date/q;p;ba}" $APTLOGFILE | 
sed -e 's/Install://g'  | 
sed -e 's/,//g' | 
perl -lpwe "s/:$ARCH \(.*?\)//g" | tee ~/Desktop/un_desk_log.txt`
else FETCHCOM="aborted by $USER"
fi
if [ "$option" = "y" ]; then ACTIONCOM="sudo apt-get remove --auto-remove "
else ACTIONCOM=""
fi
FINALCOM=$ACTIONCOM$FETCHCOM
COMLOGFILE=~/Desktop/un_desk_log.txt
eval $FINALCOM | tee -a $COMLOGFILE
sed -i.bak '1i sudo apt-get remove --auto-remove ' $COMLOGFILE
exit 0;

Скачать скрипт можно здесь: http://ubuntuone.com/4CPFXpA2gFDRZtfS6Y7sva

0
ответ дан 21 October 2012 в 04:15

Эта ссылка может вам помочь: http://www.psychocats.net/ubuntu/purexubuntu

Я использовал его метод раньше, и он работал для меня. Он предлагает возможность вернуться в «Чистый» Ubuntu, Kubuntu, Xubuntu или Lubuntu.

0
ответ дан 21 October 2012 в 04:15

Я нашел свое собственное решение для этого, и я бью себя, потому что это должно было быть очевидно с самого начала.

Установите программу из терминала и просто скопируйте / вставьте список предлагаемых зависимостей в текстовый файл. Они уже в идеальном формате для повторного ввода / вставки в терминал позднее (если вы хотите удалить их).

Например:

sudo apt-get install unity

представляет мне:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  lib32stdc++6 libdmx1
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  account-plugin-flickr appmenu-gtk appmenu-gtk3 appmenu-qt bamfdaemon compiz
  compiz-gnome geoclue geoclue-ubuntu-geoip gir1.2-accounts-1.0
  gir1.2-gdata-0.0 gir1.2-goa-1.0 gir1.2-signon-1.0 gir1.2-ubuntuoneui-3.0
  indicator-appmenu indicator-datetime indicator-printers libbamf3-0
  libdbusmenu-qt2 libglewmx1.8 libgnome-menu2 libnux-3.0-0 libnux-3.0-common
  libpackagekit-glib2-14 libsyncdaemon-1.0-1 libtimezonemap1
  libubuntuoneui-3.0-1 libunity-core-6.0-5 libunity-misc4 libunity-webapps0
  nux-tools python3-crypto python3-httplib2 python3-oauthlib
  rhythmbox-ubuntuone unity-asset-pool unity-common unity-lens-applications
  unity-lens-files unity-lens-music unity-lens-photos unity-lens-shopping
  unity-lens-video unity-scope-gdocs unity-scope-musicstores
  unity-scope-video-remote unity-services unity-webapps-service
Suggested packages:
  python3-crypto-dbg python-crypto-doc
The following NEW packages will be installed
  account-plugin-flickr appmenu-gtk appmenu-gtk3 appmenu-qt bamfdaemon compiz
  compiz-gnome geoclue geoclue-ubuntu-geoip gir1.2-accounts-1.0
  gir1.2-gdata-0.0 gir1.2-goa-1.0 gir1.2-signon-1.0 gir1.2-ubuntuoneui-3.0
  indicator-appmenu indicator-datetime indicator-printers libbamf3-0
  libdbusmenu-qt2 libglewmx1.8 libgnome-menu2 libnux-3.0-0 libnux-3.0-common
  libpackagekit-glib2-14 libsyncdaemon-1.0-1 libtimezonemap1
  libubuntuoneui-3.0-1 libunity-core-6.0-5 libunity-misc4 libunity-webapps0
  nux-tools python3-crypto python3-httplib2 python3-oauthlib
  rhythmbox-ubuntuone unity unity-asset-pool unity-common
  unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
  unity-lens-shopping unity-lens-video unity-scope-gdocs
  unity-scope-musicstores unity-scope-video-remote unity-services
  unity-webapps-service
0 upgraded, 49 newly installed, 0 to remove and 6 not upgraded.
Need to get 6,194 kB of archives.
After this operation, 23.8 MB of additional disk space will be used.
Do you want to continue [Y/n]? 

Я просто копирую и вставляю список под The following NEW packages will be installed в текстовый файл. Затем я просто заменяю 'новую строку пробелом, и все готово для вставки обратно в sudo apt-get remove, когда мне это нужно.

Итак, чтобы удалить Unity (для меня), команда:

sudo apt-get remove account-plugin-flickr appmenu-gtk appmenu-gtk3 appmenu-qt bamfdaemon compiz compiz-gnome geoclue geoclue-ubuntu-geoip gir1.2-accounts-1.0 gir1.2-gdata-0.0 gir1.2-goa-1.0 gir1.2-signon-1.0 gir1.2-ubuntuoneui-3.0 indicator-appmenu indicator-datetime indicator-printers libbamf3-0 libdbusmenu-qt2 libglewmx1.8 libgnome-menu2 libnux-3.0-0 libnux-3.0-common libpackagekit-glib2-14 libsyncdaemon-1.0-1 libtimezonemap1 libubuntuoneui-3.0-1 libunity-core-6.0-5 libunity-misc4 libunity-webapps0 nux-tools python3-crypto python3-httplib2 python3-oauthlib rhythmbox-ubuntuone unity unity-asset-pool unity-common unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos unity-lens-shopping unity-lens-video unity-scope-gdocs unity-scope-musicstores unity-scope-video-remote unity-services unity-webapps-service

Легко! И работает для любой программы.

0
ответ дан 21 October 2012 в 04:15

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

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