Hi!

* David Madore [Thu Oct 23, 2008 at 07:11:46PM +0200]:

> It would be nice to have an option --ignore-nonexistent to instruct
> apt-get to emit a non-fatal warning if any nonexistent packages are
> requested (on install, remove, etc.) rather than terminating with an
> error.  E.g., "apt-get install --ignore-nonexistent dpkg blurb" would
> just turn "Couldn't find package blurb" into a warning rather than an
> error.
>
> The reason this would be useful is that sometimes one wishes to
> install huge lists of packages (e.g., copied from another machine's
> output of dpkg -l) from which various packages may have been removed.
> When installing a list of over 2000 packages from which perhaps 100
> are nonexistent, it is a pain to have to restart 100 times apt-get,
> each time removing *one* offending package.
>
> So a --ignore-nonexistent option would be hugely useful.
>
> This is, of course, totally unrelated to --ignore-missing.

I'd like to refresh this request :)

* Eugene V. Lyubimkin [Thu Oct 23, 2008 at 08:24:21PM +0300]:
> JFYI: you can use 'aptitude install' as a workaround.

Yes, this is what is (somewhat) available with aptitude, though it
would be nice, if also apt/apt-get would support this.

For example FAI supports an option to use aptitude instead of
apt-get by using its "PACKAGES aptitude" syntax (though this is
currently broken for aptitude in FAI, see #1030312).

Demonstration with Debian/triexi, where the package tgt currently
isn't available:

| root@bc3b54bda765:~# apt install tgt zsh tgt-
| Reading package lists... Done
| Building dependency tree... Done
| Reading state information... Done
| E: Unable to locate package tgt
| E: Unable to locate package tgt

Also aptitude fails in that situation:

| root@bc3b54bda765:~# aptitude install tgt zsh tgt-
| Couldn't find any package whose name is "tgt", but there are 8 packages which 
contain "tgt" in their name:
|   liblibreofficekitgtk istgt libgnunetgtk3 libgnunetgtk-dev 
libwebkitgtk-6.0-dev gir1.2-spiceclientgtk-3.0 libwebkitgtk-6.0-4 
gir1.2-inftextgtk-0.7
| Unable to apply some actions, aborting
| root@bc3b54bda765:~# echo $?
| 255

Whereas in Debian/unstable (where package tgt *is* available),
aptitude behaves as follows (excluding the tgt package from the
list):

| root@42073ece6102:~# aptitude install tgt zsh tgt-
| Package tgt is not installed, so it will not be removed
| Package tgt is not installed, so it will not be removed
| The following NEW packages will be installed:
|   adduser{a} zsh zsh-common{a}
| 0 packages upgraded, 3 newly installed, 0 to remove and 20 not upgraded.
| Need to get 5196 kB of archives. After unpacking 19.9 MB will be used.
| Do you want to continue? [Y/n/?]
| [...]

While apt behaves as follows:

| root@42073ece6102:~# apt install tgt zsh tgt-
| Reading package lists... Done
| Building dependency tree... Done
| Reading state information... Done
| Package 'tgt' is not installed, so not removed
| The following additional packages will be installed:
|   adduser ibverbs-providers libaio1 libconfig-general-perl libibverbs1 
libnl-3-200 libnl-route-3-200 librdmacm1 libsgutils2-1.46-2 sg3-utils zsh-common
| Suggested packages:
|   cron quota tgt-glusterfs tgt-rbd zsh-doc
| The following NEW packages will be installed:
|   adduser ibverbs-providers libaio1 libconfig-general-perl libibverbs1 
libnl-3-200 libnl-route-3-200 librdmacm1 libsgutils2-1.46-2 sg3-utils tgt zsh 
zsh-common
| The following held packages will be changed:
|   tgt
| 0 upgraded, 13 newly installed, 0 to remove and 20 not upgraded.
| Need to get 7173 kB of archives.
| After this operation, 26.5 MB of additional disk space will be used.
| Do you want to continue? [Y/n]
| [...]

FTR, all command lines above executed with latest apt/aptitude versions:

| # aptitude --version | head -1
| aptitude 0.8.13
| # apt-get --version | head -1
| apt 2.7.6 (amd64)

It would be nice, if apt and aptitude could both behave similar.

Though it would be *great* if one could build command lines like:

| # apt install foo bar baz foo-

... to install the "bar baz" packages only, and ignore the foo
package. If one is wondering why this might be useful:

1) When building live systems with big(ger) amount of packages,
sometimes packages might not be available/installable at all times
(esp. true for Debian/testing). Then it's great if one can keep the
original package list as-is, but only extend a list of packages that
should be ignored. This is kind of available with aptitude and FAI
with its class approach, where one can use something like this:

| # head /etc/grml/fai/config/package_config/BASE
| PACKAGES aptitude
|
| foo
| bar
| baz

| # cat /etc/grml/fai/config/package_config/IGNORE
|
| PACKAGES aptitude
| foo-

Then the package "foo" gets ignored, though the original software
selection in the "BASE" file doesn't need to be modified.

2) Trying to install a list of packages on the command line often
ends up in bisecting the package that's actually causing the failure
(WRT dependencies/conflicts/...), also as mention by David in his
original bug report above. If one can use something like:

| # apt install foo bar baz [tons_of_packages] foo-
| # apt install foo bar baz [tons_of_packages] bar-
| ...

... to identify which package is causing the problem, that would be
a time-safer. :)

Not sure if the current apt behavior/pattern matching would support
this, though if a specific option would be introduced to get such a
behavior, I'd also be more than happy. :)

Thanks for consideration!

regards
-mika-

Attachment: signature.asc
Description: PGP signature

Reply via email to