How to reinstall a package using 'apt-get'?

197

31

It seems that my aptitude is somehow broken:

sudo aptitude update
0% [Working]Segmentation fault

dmesg
[223282.616599] aptitude[30972]: segfault at 67707f ip 7f954dcfae5d sp 7ffff5a5f950 error 4 in libapt-pkg-libc6.7-6.so.4.6.0[7f954dca5000+bd000]

So I would like to reinstall aptitude by using apt-get.

Unfortunately it seems apt-get doesn't have a reinstall option.

How could I get aptitude to work again?

It's possible that I found the root cause for aptitude's segfault. Here is how I can reproduce it:

  1. 'ssh' remote login into the Debian machine via Cygwin's rxvt terminal (from a Windows 7 64-bit German edition).
  2. Enlarge the rxvt window so that it spans across two monitors (yes, I have two monitors)
  3. Run aptitude update. Note: when I resize the rxvt terminal to normal then I don't have these segmentation faults!

Vokuhila-Oliba

Posted 2010-01-30T00:20:14.870

Reputation: 3 547

Answers

333

$ man apt-get | grep reinsta -A2
       --reinstall
           Re-Install packages that are already installed and at the newest
           version. Configuration Item: APT::Get::ReInstall.

So, to use it to reinstall aptitude use:

sudo apt-get install --reinstall aptitude

user23307

Posted 2010-01-30T00:20:14.870

Reputation: 5 915

16what's that -A5 you are grepping ? – Vokuhila-Oliba – 2010-01-30T12:51:14.170

90man grep | grep -- "-A" – user1686 – 2010-01-30T13:04:07.163

36What's that -- you're grepping? – Desty – 2014-09-11T09:55:31.633

17man getopt, look under PARSING – Tino – 2014-11-17T16:43:33.580

31-A5 shows the matched line plus the following 5 lines. -- stops parsing of options, thus interpreting anything that comes after as positional arguments, avoiding having to escape the dash in the expression -A which would otherwise be interpreted as an option to grep itself. – jjmontes – 2014-11-18T18:20:32.547

2@jjmontes So technically quotes around "-A" are not necesary: man grep | grep -- -A – Dimitry K – 2014-12-20T16:20:10.460

120

You can reinstall a package with sudo apt-get install --reinstall packagename. This completely removes the package (but not the packages that depend on it), then reinstalls the package.

This can be convenient when the package has many reverse dependencies.

Milad Khajavi

Posted 2010-01-30T00:20:14.870

Reputation: 1 293

10Thank you for being the only correct, complete, non-snarky answer. – Cerin – 2013-04-05T04:55:05.043

6@Cerin: I wouldn't call the other answers overly snarky: even the "read the man page" one actually gave the answer as well as how to find it. – David Spillett – 2013-04-05T13:50:50.300

46@DavidSpillett, I strongly disagree. The man pages are usually very poorly written and are very unfriendly to newbies. For example, the paragraph on the "--reinstall" option doesn't mention that you have to use it with the "install" argument. A newbie might rightfully ask "why do I have to tell it to install AND reinstall?" An answer telling someone to RTFM is the worst kind of answer and it pains me to see it with the most votes, especially when a complete and actually helpful answer is near the bottom. – Cerin – 2013-04-05T21:34:22.993

25

Sometimes you need to restore config files too! not just reinstall.

sudo apt-get install --reinstall xxxx

Reinstall the application, keeps the config files.

This could be helpful, but sometimes you need to start fresh, so what I use is this:

sudo dpkg -r xxxx //to remove that xxxx package
sudo dpkg -P xxxx //to purge all related files

then

sudo apt-get install xxxx

andreskwan

Posted 2010-01-30T00:20:14.870

Reputation: 361

6And if you need to restore config files only, in some cases (if they are managed by ucf) you should use UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname]. – Skippy le Grand Gourou – 2015-02-23T18:04:06.680

2This answer deserves a BIG upvote.This is what you need when you want to "fully reinstall" a package. E.g. a simple --reinstall of vsftpd doesn't re-create the config file, even if the file doesn't exist anymore. A "Remove+Purge+(Re)install" does the job instead. – Kar.ma – 2019-02-22T15:31:51.630

14

You should be safe to remove aptitude and reinstall, as that won't affect the other apt utilities. So: apt-get remove aptitude followed by apt-get install aptitude, or if that still fails try apt-get purge aptitude followed by apt-get install aptitude.

Before doing either of the above, I recommend a full file-system and bad-block check in case there is a problem there that caused the problem (depending on the problem, if there is one, further activity could make things worse). Also, make sure you review what will be removed in the remove/purge step before letting it proceed (it should pause to ask for permission if anything extra is changed as a result of removing that one package), to double check my thought that this is safe.

David Spillett

Posted 2010-01-30T00:20:14.870

Reputation: 22 424

Thanks a lot! apt-get remove followed by apt-get install did the trick! – Vokuhila-Oliba – 2010-01-30T00:32:18.043

It's a long time ago that I did things like a full filesystem check or similar. Could you please give me a short hint howto do that? – Vokuhila-Oliba – 2010-01-30T00:50:37.617

1fsck -f <block_device> such as fsck /dev/sda1. The filesystem will need to be unmounted or mounted read-only at the time so as this is likely to be your root filesystem you should reboot into single-user-mode or boot from something else like a live cd. – David Spillett – 2010-01-30T01:24:05.540

@David: Is there a way to force a filesystem check on next reboot ? – Vokuhila-Oliba – 2010-01-30T12:53:11.030

2You can use tune2fs to mark the filesystem as having been mounted more times than its set limit, that should force a check next boot. Assuming the filesystem is ext2/3/4: tune2fs -C 99 <device>, or in case you have mount count based checking turned off, turn it on at the same time with something like tune2fs -c 17 -C 99 <device>. – David Spillett – 2010-01-30T13:20:43.070

2touch /forcefsck;reboot – user23307 – 2010-01-30T14:53:08.090

1

sudo apt remove --purge package
sudo apt install package

That's like you never had installed the package before. I am doing this often with motion and such things.

Niwla23

Posted 2010-01-30T00:20:14.870

Reputation: 11