apt / dpkg cheatsheet
Fix broken/aborted installation
- apt-get update --fix-missing
- dpkg --configure -a
- apt-get install -f
Reconfigure
- dpkg-reconfigure package
No questions asked / use old config:
- ??
apt upgrade vs apt-dist upgrade
upgrade
    upgrade is used to install the newest versions of all packages
    currently installed on the system from the sources enumerated in
    /etc/apt/sources.list. Packages currently installed with new
    versions available are retrieved and upgraded; under no
    circumstances are currently installed packages removed, or packages
    not already installed retrieved and installed. New versions of
    currently installed packages that cannot be upgraded without
    changing the install status of another package will be left at
    their current version. An update must be performed first so that
    apt-get knows that new versions of packages are available.
dist-upgrade
    dist-upgrade in addition to performing the function of upgrade,
    also intelligently handles changing dependencies with new versions
    of packages; apt-get has a "smart" conflict resolution system, and
    it will attempt to upgrade the most important packages at the
    expense of less important ones if necessary. So, dist-upgrade
    command may remove some packages. The /etc/apt/sources.list file
    contains a list of locations from which to retrieve desired package
    files. See also apt_preferences(5) for a mechanism for overriding
    the general settings for individual packages.
apt upgrade unattended, use default answers (no) or fallback to old config
export DEBIAN_FRONTEND=noninteractive; apt update; apt --assume-yes -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" dist-upgrade: apt autoremove
- DEBIAN_FRONTEND=noninteractive
	- Use default answers
 https://linuxhint.com/debian_frontend_noninteractive/
 
- Use default answers
- --assume-yes
	- Answer questions with yes (Do you want to upgrade...)
 
- -o "Dpkg::Options::=--force-confdef"
	- Use default package config for new packages
 
- -o "Dpkg::Options::=--force-confold"
	- Use existing config for already installed packages (to not overwrite the existing config!)
 
Needed?
- 
	export DEBIAN_PRIORITY=critical - 
		ask only absolutely necessary questions 
 
- 
		
- 
	apt -q - 
		Quiet, don't ask questions 
 
- 
		
Find out if a package is installed
- dpkg -s packageName
List manualy / 3rd party packages
E.g. after dist-upgrade
- 
	apt list --installed | grep -F "$(gettext 'apt' '[installed,local]')" 
Install a package manually
- wget http://de.archive.ubuntu.com/ubuntu/pool/universe/p/packageName/packageName_2.48.3-1ubuntu1_amd64.deb
- dpkg -i packageName_2.48.3-1ubuntu1_amd64.deb
If you installed an older version make sure to set the package on "hold" (see below)
Prevent a package from beeing updated (Hold)
List hold packages
- 
	apt-mark showhold 
Mark hold
- sudo apt-mark hold packageName
- Deprecated: echo "packageName hold" | dpkg --set-selections
Revert hold with
- apt-mark unhold packageName
Uninstall a package manually
- dpkg -r packageName
Information about a .deb package
Basic information
- dpkg-deb -I packageName
 
List of files
- dpkg-deb -c packageName
Which package does a file belong to?
- dpkg-query -S /path/to/file
Try to install dependencies automatically
- dpkg -i packageName_2.48.3-1ubuntu1_amd64.deb 
	- dpkg: dependency problems...
 
- apt-get -f install
Force installation even if dependencies are unmet
- dpkg -i --force-depends packageName_2.48.3-1ubuntu1_amd64.deb
 
Get a list of manually installed packages
http://askubuntu.com/questions/17823/how-to-list-all-installed-packages
- zgrep -hE '^(Start-Date:|Commandline:)' $(ls -tr /var/log/apt/history.log*.gz ) | egrep -v 'aptdaemon|upgrade' | egrep -B1 '^Commandline:'
Fix errors in pre/post scripts
- The scripts are in /var/lib/dpkg/info
- Example for w3m
	- w3m.postinst
 w3m.postrm
 w3m.preinst
 w3m.prerm
 
- w3m.postinst
Re-Install all Packages
- sudo aptitude reinstall '~i'
- for pkg in `dpkg --get-selections | awk '{print $1}' | egrep -v '(dpkg|apt|mysql|mythtv)'` ; do apt-get -y --force-yes install --reinstall $pkg ; done
 
Install list of packages, eg. replicate on second computer
- apt install dselect
- 
	apt update 
- 
	dselect update 
- 
	dpkg --get-selections > selections.txt 
- 
	# copy selections.txt to other computer 
- 
	dpkg --set-selections < selections.txt 
- 
	dselect install 
Manage alternatives
- update-alternatives --get-selections
	- List items with alternatives
 
- update-alternatives --get-selections | grep php
	- php auto /usr/bin/php8.0
 
- php --version
	- 8.0
 
- update-alternatives --set php /usr/bin/php7.4
- php --version
	- 7.4
 
APT Cache
- apt autoclean
	- removes all stored archives in your cache for packages that can not be downloaded anymore (thus packages that are no longer in the repo or that have a newer version in the repo).
 
- apt clean
	- removes all stored archives in your cache.
 
Automatic apt clean (does this work?)
vi /etc/apt/apt.conf.d/99custom-conf
- # Remove downloaded .deb files after installation by apt-get
 APT::Keep-Downloaded-Packages "false";
Get a list of installed packages ordered by priority
dpkg-query -Wf '${Package;-40}${Priority}\n' | sort -b -k2,2 -k1,1
  

