# problem z zaleznosciami

## canis_lupus

dostałem od roku ni aktualizowany system do zaktualizowania. Niestety cos dziwnego sie dzieje:

```
emerge -uDN world

 * IMPORTANT: 5 news items need reading for repository 'gentoo'.

 * Use eselect news to read news items.

Calculating dependencies... done!

[nomerge      ] media-libs/gegl-0.0.22  USE="cairo* doc jpeg mmx png raw sdl* sse svg -debug -ffmpeg -openexr -v4l" 

[nomerge      ]  media-gfx/imagemagick-6.6.1.2 [6.5.2.9] USE="X bzip2 cxx%* djvu fftw%* jbig jpeg jpeg2k lcms* openmp perl png raw svg tiff truetype xml zlib -autotrace% -fontconfig -fpx -graphviz -gs -hdri -lqr% -openexr -q32 -q8 -static-libs% -wmf (-corefonts%*) (-doc%*) (-nocxx%)"                                                                                                                                                                                              

[nomerge      ]   media-gfx/ufraw-0.16 [0.15-r1] USE="exif gimp gnome gtk%* openmp -contrast -hotpixels% -lensfun% -timezone" 

[nomerge      ]    media-gfx/gimp-2.6.8  USE="alsa curl doc exif gnome hal jpeg lcms mmx mng pdf png python smp sse svg tiff -aalib (-altivec) -dbus -debug -webkit -wmf" 

[nomerge      ]     dev-python/pygtk-2.16.0-r1 [2.14.1-r1] USE="doc examples -test% (-X%*)" 

[nomerge      ]      dev-python/pycairo-1.8.8 [1.8.2] USE="doc%* examples svg%*" 

[nomerge      ]       dev-python/sphinx-0.6.7  USE="doc latex -test" 

[ebuild  N    ]        dev-python/jinja-2.5  USE="doc examples -i18n -test" 0 kB

[ebuild  N    ]         dev-python/sphinx-0.6.7  USE="doc latex -test" 0 kB

Total: 2 packages (2 new), Size of downloads: 0 kB

 * Error: circular dependencies:

('ebuild', '/', 'dev-python/jinja-2.5', 'merge') depends on

  ('ebuild', '/', 'dev-python/sphinx-0.6.7', 'merge') (buildtime)

('ebuild', '/', 'dev-python/sphinx-0.6.7', 'merge') depends on

  ('ebuild', '/', 'dev-python/jinja-2.5', 'merge') (buildtime)

 * Note that circular dependencies can often be avoided by temporarily

 * disabling USE flags that trigger optional dependencies.
```

co moge z tym zrobic? jakie flagi moga byc za to odpowiedzialne?

emerge --info:

```
Portage 2.1.8.3 (default/linux/x86/10.0/desktop, gcc-4.3.2, glibc-2.9_p20081201-r2, 2.6.30-gentoo-r4715 i686)

=================================================================

System uname: Linux-2.6.30-gentoo-r4715-i686-Intel-R-_Atom-TM-_CPU_N270_@_1.60GHz-with-gentoo-1.12.11.1

Timestamp of tree: Thu, 15 Jul 2010 09:30:01 +0000

distcc 3.1 i686-pc-linux-gnu [enabled]

app-shells/bash:     4.0_p28

dev-lang/python:     2.5.4-r3, 2.6.2-r1

sys-apps/baselayout: 1.12.11.1

sys-apps/sandbox:    1.6-r2

sys-devel/autoconf:  2.13, 2.63-r1

sys-devel/automake:  1.5, 1.9.6-r2, 1.10.2

sys-devel/binutils:  2.18-r3

sys-devel/gcc:       4.3.2-r3

sys-devel/gcc-config: 1.4.1

sys-devel/libtool:   2.2.6a

virtual/os-headers:  2.6.27-r2

ACCEPT_KEYWORDS="x86"

ACCEPT_LICENSE="* -@EULA"

CBUILD="i686-pc-linux-gnu"

CFLAGS="-O2 -march=i686 -pipe"

CHOST="i686-pc-linux-gnu"

CONFIG_PROTECT="/etc"

CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/php/apache2-php5/ext-active/ /etc/php/cgi-php5/ext-active/ /etc/php/cli-php5/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c /etc/udev/rules.d"

CXXFLAGS="-O2 -march=i686 -pipe"

DISTDIR="/usr/portage/distfiles"

FEATURES="assume-digests distcc distlocks fixpackages news parallel-fetch protect-owned sandbox sfperms strict unmerge-logs unmerge-orphans userfetch"

GENTOO_MIRRORS="http://gentoo.mirror.pw.edu.pl/ "

LC_ALL="pl_PL"

LDFLAGS="-Wl,-O1"

LINGUAS="pl"

MAKEOPTS="-j10 -s"

PKGDIR="/usr/portage/packages"

PORTAGE_CONFIGROOT="/"

PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"

PORTAGE_TMPDIR="/var/tmp"

PORTDIR="/usr/portage"

SYNC="rsync://rsync.gentoo.org/gentoo-portage"

USE="X Xaw3d a52 aac acl acpi alsa apache2 apm bash-completion bcmath berkdb bidi bindist blas bluetooth branding bzip2 cairo calendar cgi clamav cli consolekit cracklib crypt ctype cups curl curlwrappers cxx dbase dbm dbx dga djvu doc dri dts emacs encode enscript examples exif expat fam fastcgi fftw firebird firefox flac fortran freetds ftp gcj gd gdbm gif gimp gmp gnome gnuplot gnutls gphoto2 gpm gsl gtk gtkhtml gzip hal hddtemp hdf5 iconv imagemagick imap imlib iodbc ipv6 jadetex javascript jbig jpeg jpeg2k kerberos lapack latex lcms ldap libnotify libwww mad maildir mailwrapper memlimit mikmod mime mmap mmx mng modules mono mozilla mp3 mp4 mpeg mpi mssql mudflap mule ncurses netboot nis nls nocd nptl nptlonly nsplugin odbc ofx ogg opengl openmp pam pango pcre pdf perl plotutils png posix postgres ppds pppd python qt3support qt4 radius raw rdesktop readline recode reflection samba sdl session sharedmem simplexml smp snmp sockets socks5 source spell spl sse sse2 ssl startup-notification svg svga symlink sysfs syslog sysvipc tcpd threads tidy tiff tk truetype unicode usb vhosts vim-syntax vnc vorbis wifi x264 x86 xattr xcb xcomposite xine xinetd xml xmlrpc xorg xpm xsl xulrunner xv xvid zeroconf zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" ELIBC="glibc" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="pl" RUBY_TARGETS="ruby18" USERLAND="GNU" VIDEO_CARDS="intel i810" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" 

Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, FFLAGS, INSTALL_MASK, LANG, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, PORTDIR_OVERLAY
```

----------

## lazy_bum

Trochę w stylu posta dziadu postaram się wyjaśnić o co chodzi.

 *canis_lupus wrote:*   

> dostałem od roku ni aktualizowany system do zaktualizowania. Niestety cos dziwnego sie dzieje:
> 
> ```
> emerge -uDN world
> 
> ...

 

Mam błąd i co mam teraz zrobić

W tym wypadku na dole mamy wyraźną informację co jest nie tak jak trzeba:

```
('ebuild', '/', 'dev-python/jinja-2.5', 'merge') depends on

  ('ebuild', '/', 'dev-python/sphinx-0.6.7', 'merge') (buildtime)

('ebuild', '/', 'dev-python/sphinx-0.6.7', 'merge') depends on

  ('ebuild', '/', 'dev-python/jinja-2.5', 'merge') (buildtime)
```

Typowe circular dependency (Gentoo Wiki). W tym wypadku do zbudowania pakietu jinja potrzebujemy już zainstalowanego pakietu sphinx i na odwrót, czyli do zbudowania pakietu sphinx potrzebujemy już zainstalowanego pakietu jinja. Problem wydaje się beznadziejny, a paczkę będziemy musieli instalować ręcznie? Nic podobnego!

Dogłębna analiza i rozwiązanie problemu (-;

Popatrzmy teraz dwie linijki niżej, a znajdziemy podpowiedź, która doprowadzi do rozwiązania problemu:

```
 * Note that circular dependencies can often be avoided by temporarily

 * disabling USE flags that trigger optional dependencies.
```

Co z tym zrobić? Pierwsze co mi przyszlo do głowy to... popatrzeć na ebuildy (nie jest to takie straszne jakby się wydawało) do obu pakietów:

```
$ eview dev-python/sphinx

*ciach*

RDEPEND=">=dev-python/pygments-0.8

    >=dev-python/jinja-2.1

    >=dev-python/docutils-0.4

    latex? ( dev-texlive/texlive-latexextra )"

DEPEND="${RDEPEND}

    dev-python/setuptools"

*ciach*
```

Co możemy z tego wyczytać? Pakiet sphinx do instalacji potrzebuje zainstalowanego pakietu jinja.

Krótkie wyjaśnienie:

RDEPEND (→zależności potrzebne do uruchomienia) wskazuje na >=dev-python/jinja-2.1 - więc dlaczego potrzebne nam to do instalacji? To wyjaśnia się trochę niżej:

DEPEND (→zależności potrzebne przy instalacji/kompilacji) =${RDEPEND}  - czyli w rzeczywistości jinja potrzebna jest nam już przy instalacji.

Idziemy więc dalej:

```
$ eview jinja

*ciach*

RDEPEND="dev-python/setuptools

    i18n? ( >=dev-python/Babel-0.9.3 )"

DEPEND="${RDEPEND}

    doc? ( >=dev-python/sphinx-0.6 )"

*ciach*
```

Tym razem sytuacja wydaje się lepsza, ale ponownie do instalacji (→DEPEND) pakietu jinja potrzebujemy >=dev-python/sphinx-0.6. Zwróćmy jednak uwagę, że ta zależność jest otoczona nawiasami przed którymi stoi doc?. Co to oznacza? Jeżeli pakiet jinja chcemy instalować z flagą doc, to wtedy i tylko wtedy, potrzebujemy do tego zainstalowanego pakietu sphinx.

Jak wyjść z tej sytuacji? Najprostszym rozwiązaniem będzie chwilowe wyłączenie flagi doc i zainstlowanie pakietu jinja:

```
USE=-doc emerge -1va jinja
```

Następnie możemy normalnie kontynuować instalację. Pakiet sphinx będzie już “zadowolony”, bo ma zainstalowany pakiet jinja, który z kolei powinien po chwili (jeżeli używamy flagi --newuse) zainstalować się ponownie, tym razem bez problemów, z flagą doc.

P.S. W przyszłych wersjach portage być może ten problem zniknie (dla zainteresowanych błąd #175808).

P.S.2. eview, którego używam powyżej, to proste narzędzie do wyświetlania ebuildów. Wystarczy dodać do swojego .{bash,zsh,cokolwiek}rc (i mieć zainstalowany gentoolkit):

```
eview() { 

        FILE=$(equery which $1) 

        if [ -f "$FILE" ]; then 

                view $FILE 

        fi 

}
```

----------

