Hablando con propiedad sobre la gestión de paquetes en openSUSE 11.0.
$ ls /etc/zypp/repos.d/
education.repo      nvidia.repo                 openSUSE_Tools.repo  repo-non-oss.repo
games.repo          openSUSE-11.0-Updates.repo  packman.repo         repo-oss.repo
home_RedDwarf.repo  openSUSE-DVD 11.0.repo      repo-debug.repo      videolan.repo
Todos menos repo-debug.repo están activos. Son 11 repositorios activos, donde el DVD es un subconjunto de repo-oss.repo y repo-non-oss.repo (más algún paquete como agfa-fonts que no se puede distribuir vía FTP por temas legales).
# time zypper ref -f
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'VideoLan Repository' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'VideoLan Repository' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE Education' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE Education' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE-11.0-Oss' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE-11.0-Oss' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'Packman Repository' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'Packman Repository' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE-DVD 11.0' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE-DVD 11.0' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE-11.0-Updates' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE-11.0-Updates' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE.org tools' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE.org tools' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'NVIDIA Repository' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'NVIDIA Repository' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'RedDwarf's Home Project' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'RedDwarf's Home Project' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE-11.0-Non-Oss' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE-11.0-Non-Oss' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE BuildService - Games' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE BuildService - Games' [hecho]
Todos los repositorios han sido actualizados.
real    0m29.455s
user    0m6.820s
sys     0m2.312s
Son 30 segundos en actualizarlos todos. Incluido todo el proceso: descarga y parseado de metadatos.
La mayor parte del tiempo se la lleva la descaga en mi conexión a ~300KB/s. La mayor parte de la descarga se la lleva el repositorio principal... pero es que el repositorio principal es estático, con lo que no hace falta actualizarlo nunca después de añadirlo la primera vez.
Si sólo actualizamos los repositorios que en el día a día pueden llegar a actualizarse:
# time zypper ref -f -r videolan -r education -r packman -r openSUSE-11.0-Updates -r openSUSE_Tools -r nvidia -r home_RedDwarf -r games
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'VideoLan Repository' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'VideoLan Repository' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE Education' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE Education' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'Packman Repository' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'Packman Repository' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE-11.0-Updates' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE-11.0-Updates' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE.org tools' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE.org tools' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'NVIDIA Repository' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'NVIDIA Repository' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'RedDwarf's Home Project' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'RedDwarf's Home Project' [hecho]
Forzando actualización de metadatos en bruto
Descargando los metadatos del repositorio 'openSUSE BuildService - Games' [hecho]
Se está forzando la construcción del caché del repositorio
Construyendo el caché del repositorio 'openSUSE BuildService - Games' [hecho]
Los repositorios especificados han sido actualizados.
real    0m11.289s
user    0m3.120s
sys     0m1.696s
En el peor de los casos, si *todos* (los ocho) repositorios están desactualizados le lleva 11 segundos todo el proceso.
Si todos los repositorios están actualizados:
# time zypper ref -r videolan -r education -r packman -r openSUSE-11.0-Updates -r openSUSE_Tools -r nvidia -r home_RedDwarf -r games
El repositorio 'VideoLan Repository' está actualizado.
El repositorio 'openSUSE Education' está actualizado.
El repositorio 'Packman Repository' está actualizado.
El repositorio 'openSUSE-11.0-Updates' está actualizado.
El repositorio 'openSUSE.org tools' está actualizado.
El repositorio 'NVIDIA Repository' está actualizado.
El repositorio 'RedDwarf's Home Project' está actualizado.
El repositorio 'openSUSE BuildService - Games' está actualizado.
Los repositorios especificados han sido actualizados.
real    0m2.148s
user    0m0.236s
sys     0m0.200s
Le lleva 2 segundos comprobarlo. Esto incluye descargar un archivo de cada repositorio... con lo que las leyes de la física ya imponen un tiempo mínimo de "2*número de repositorios*ping medio con los servidores" segundos. En mi caso esto significa que de los 2,148 segundos que tarda, un mínimo de 1,280 ya son por temas de red.
Si se hacen varias operaciones seguidas no se comprueba si hay actualizaciones cada vez. Así que sólo hay que esperar esos dos segundos la primera vez. Es configurable, pero por defecto creo que son 10 minutos el tiempo que tiene que pasar desde la última comprobación para volver a comprobar si el repositorio se ha actualizado.
Naturalmente siempre puedes desactivar la comprobación de que los repositorios están actualizados y sólo lo comprueba cuando tú se lo digas manualmente.
# time zypper up -t package
Leyendo los paquetes instalados...
No hay nada que hacer.
real    0m0.895s
user    0m0.700s
sys     0m0.212s
Menos de 1 segundo en comprobar que no hay actualizaciones disponibles en ningún repositorio.
# time yes no | zypper in -t pattern gnome
Leyendo los paquetes instalados...
Los siguientes paquetes NUEVOS van a ser instalados:
  xorg-x11-server-extra zenity yelp yast2-gtk yast2-control-center-gnome xsane xchat vte
vino vinagre-lang vinagre unrar totem-plugin totem-pl-parser totem tomboy tasque
silc-toolkit sensors seahorse-lang seahorse scrollkeeper rsvg-view rarian python-orbit
python-opengl python-gtksourceview python-gtkglext python-gnome-extras python-gnome
python-gdata pwlib pulseaudio-utils pulseaudio-module-zeroconf
pulseaudio-module-x11 pulseaudio-module-lirc pulseaudio-module-gconf
pulseaudio-module-bluetooth pulseaudio podsleuth planner-lang planner pinentry-gtk2
pidgin phalanx perl-HTML-TableExtract perl-Finance-Quote perl-DateManip pavumeter
pavucontrol paprefs paman padevchooser orca opensp opal notify-sharp
notification-daemon nautilus-share nautilus-sendto nautilus-open-terminal
nautilus-cd-burner nautilus multisync-gui mozilla-xulrunner181 mono-winforms
mono-web mono-extras mono-data-sqlite mono-data mono-core metacity liferea
libxml2-python libxklavier12 libxklavier libwnck libwnck-1-22 libssui0 libssui libsexy
libsensors4 libpurple libpulsecore4 libpulse0-32bit libpulse0
libpulse-mainloop-glib0 libpulse-browse0 libpisync0 libopensync-plugin-file libofx4
libofx libnvtv libnotify1 libnotify libgwenhywfar38 libgweather1 libgweather
libgtop-2_0-7 libgtop libgtksourceview-2_0-0 libgtk-vnc-1_0-0 libgsf-gnome libgsf
libgnomesu0 libgnomesu libgnomeprintui libgnomeprint libgnomekbd libgnomecups
libgnomebt0 libgnome-menu2 libgnome-desktop-2-2 libgmime-2_0-3 libgluezilla0
libglademm-2_4-1 libglademm libgdiplus0 libgda-3_0-sqlite libgda-3_0-postgres
libgda-3_0-odbc libgda-3_0-mysql libgda-3_0 libgda-3_0-3 libgda libgalago
libgail-gnome libgadu libexempi3 libelf1 libeel-2-2 libbtctl4 libbtctl libbeagle1
libavahi-ui0 ktoblzcheck input-utils gwenhywfar gucharmap gtkspell gtksourceview18
gtksourceview gtkhtml314-sharp gtkhtml2 gtkglext gtk-sharp2 gstreamer-0_10-pulse
gphoto goffice-lang goffice gnucash-lang gnucash gnome-web-photo gnome-volume-manager
gnome-vfs-sharp2 gnome-vfs-obexftp gnome-utils gnome-terminal gnome-system-monitor
gnome-spell2 gnome-speech gnome-sharp2 gnome-settings-daemon gnome-session
gnome-screensaver gnome-python-desktop gnome-printer-add gnome-power-manager
gnome-pilot-lang gnome-pilot gnome-panel gnome-packagekit gnome-nettool gnome-mount
gnome-menus gnome-media gnome-main-menu gnome-mag gnome-keyring-pam gnome-games
gnome-do gnome-desktop gnome-cups-manager gnome-control-center gnome-bluetooth
gnome-applets gmime-sharp gmime glib-sharp2 glade-sharp2 ggreeter gftp-lang gftp gedit
gdm gconfmm gconf-sharp2 gconf-editor gcalctool galago-daemon file-roller festival
fast-user-switch-applet-lang fast-user-switch-applet f-spot evolution-pilot
evolution-data-server evolution evince eog ekiga eel dia-lang dia deskbar-applet
dbus-1-python dasher-lang dasher dante cups-backends compiz-gnome cheese cdk bug-buddy
brasero bogofilter bluez-gnome banshee-1-extensions-default
banshee-1-backend-platform-unix banshee-1-backend-platform-gnome
banshee-1-backend-engine-gstreamer banshee-1 at-spi art-sharp2 aqbanking-lang
aqbanking alacarte-lang alacarte PolicyKit-gnome-libs PolicyKit-gnome PackageKit
OpenOffice_org-gnome NetworkManager-gnome xmlcharent tango-icon-theme taglib-sharp
slib opensuse-gnomequick_en ndesk-dbus-glib ndesk-dbus monsoon mono-addins
latex2html-pngicons iso_ent iso-codes gtk2-themes gnucash-docs gnome2-user-docs
gnome-themes gnome-doc-utils gnome-audio gdm-branding-openSUSE galago-sharp
docbook_4 libflashsupport
Los siguientes patrones NUEVOS van a ser instalados:
  non_oss_java non_oss yast2_install_wf yast2_basis xgl x11_opt x11 sw_management_gnome
sw_management office_opt office multimedia_opt multimedia imaging_opt imaging
gnome_yast gnome_xgl gnome_utilities_opt gnome_utilities gnome_office_opt
gnome_office gnome_multimedia_opt gnome_multimedia gnome_internet gnome_imaging_opt
gnome_imaging gnome_games gnome_basis_opt gnome_basis gnome_admin gnome games_opt
games fonts_opt fonts enhanced_base_opt enhanced_base base
Tamaño de descarga total: 148,5 M. Después de la operación, se utilizarán 555,2 M adicionales.
¿Desea continuar? [Sí/no]:
real    0m1.361s
user    0m1.172s
sys     0m0.176s
En un sistema KDE3, si le pides que instale todo el escritorio Gnome, le lleva algo más de un segundo calcular todas las dependencias (más el yes y crear la pipe...).
Problemas obvios:
- No hay forma de hacer un "zypper up -t package" vía las interfaces gráficas. Tanto el applet de actualización de KDE como el módulo de gestión de paquetes de YaST de QT (no he probado las versiones GTK) lo más parecido que hacen es algo que ignora las prioridades de los repositorios.
- "LANG=C zypper install -h" habla de una opción --no-recommends (en español ni sale). Pero donde está la opción --add-suggests? Si existe una es de cajón añadir la otra...
- La documentación no siempre es buena. Creo que en ninguna parte explica que a la hora de actualizar PRIMERO se tiene en cuenta el "Vendor" y después las prioridades de los repositorios.
- Si un paquete necesita una dependencia que no está disponible existe la posibilidad de decirle que ignore esa dependencia. La lista de dependencias ignoradas se almacena en alguna parte... vete a saber cual. No hay ninguna forma de obtener la lista. Y si quieres dejar de ignorar dependencias sólo tienes la opción de borrar TODOS los casos, no uno específico.