Mam błąd i co mam teraz zrobić
Przede wszystkim nie panikować. Ważna też jest umiejętność czytania raportów o błędzie.
Czemu "error" to nie zawsze błąd
Niestety słowo error stało się przekleństwem, a gdy jest do tego pisane wielką literą to już koniec świata. Na forum znajdzie się wiele wątków z problemami, w których znajdzie się w pierwszym poście raport taki jak ten (i tylko tyle):
Code: Select all
* ERROR: app-misc/realpath-1.15 failed:
* emake failed
*
* Call stack:
* ebuild.sh, line 54: Called src_compile
* environment, line 2248: Called die
* The specific snippet of code:
* emake VERSION="${PV}" SUBDIRS="src man $(use nls && echo po)" || die "emake failed"
*
* If you need support, post the output of 'emerge --info =app-misc/realpath-1.15',
* the complete build log and the output of 'emerge -pqv =app-misc/realpath-1.15'.
* The complete build log is located at '/var/tmp/portage/app-misc/realpath-1.15/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/app-misc/realpath-1.15/temp/environment'.
* S: '/var/tmp/portage/app-misc/realpath-1.15/work/realpath-1.15'
>>> Failed to emerge app-misc/realpath-1.15, Log file:
>>> '/var/tmp/portage/app-misc/realpath-1.15/temp/build.log'
* Messages for package app-misc/realpath-1.15:
* ERROR: app-misc/realpath-1.15 failed:
* emake failed
*
* Call stack:
* ebuild.sh, line 54: Called src_compile
* environment, line 2248: Called die
* The specific snippet of code:
* emake VERSION="${PV}" SUBDIRS="src man $(use nls && echo po)" || die "emake failed"
*
* If you need support, post the output of 'emerge --info =app-misc/realpath-1.15',
* the complete build log and the output of 'emerge -pqv =app-misc/realpath-1.15'.
* The complete build log is located at '/var/tmp/portage/app-misc/realpath-1.15/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/app-misc/realpath-1.15/temp/environment'.
* S: '/var/tmp/portage/app-misc/realpath-1.15/work/realpath-1.15'Nie dość, że napisane jest ERROR to jeszcze portage wyświetla to na czerwono.
Ważne by zapamiętać, że to NIE JEST dobry raport błędu. Możemy to nazwać backtrace z portage, które mówi w którym miejscu przetwarzania ebuilda pojawił się błąd. W powyższym przykładzie jest to fragment
Code: Select all
* The specific snippet of code:
* emake VERSION="${PV}" SUBDIRS="src man $(use nls && echo po)" || die "emake failed" Błędy kompilacji
Są to najczęstsze błędy i tutaj niestety przyczyn może być wiele, i nie każdy, szczególnie osoby nie mające doświadczenia w programowaniu, poradzą sobie z tym. Przykład z mojego podwórka - dzisiaj aktualizowałem k3b do wersji 9999. Oto poprawny raport błędu:
Code: Select all
[ 56%] Building CXX object src/CMakeFiles/k3b_bin.dir/projects/k3baudioviewimpl.cpp.o
/var/tmp/paludis/app-cdr-k3b-9999/work/k3b-9999/src/projects/k3baudioviewimpl.cpp:126:2: warning: #warning enable player once ported to Phonon
/var/tmp/paludis/app-cdr-k3b-9999/work/k3b-9999/src/projects/k3baudioviewimpl.cpp:499:2: warning: #warning Do not select hidden sources once the hiding of sources works again
/var/tmp/paludis/app-cdr-k3b-9999/work/k3b-9999/src/projects/k3baudioviewimpl.cpp: In constructor 'K3b::AudioViewImpl::AudioViewImpl(K3b::View*, K3b::AudioDoc*, KActionCollection*)':
/var/tmp/paludis/app-cdr-k3b-9999/work/k3b-9999/src/projects/k3baudioviewimpl.cpp:121: error: 'm_actionMusicBrainz' was not declared in this scope
make[2]: *** [src/CMakeFiles/k3b_bin.dir/projects/k3baudioviewimpl.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/k3b_bin.dir/all] Error 2
make: *** [all] Error 2
/usr/libexec/paludis/utils/emake: emake returned error 2
!!! ERROR in app-cdr/k3b-9999::kde:
!!! In cmake-utils_src_make at line 1478
!!! Make failed!
!!! Call stack:
!!! * cmake-utils_src_make (/var/tmp/paludis/app-cdr-k3b-9999/temp/loadsaveenv:1478)
!!! * enable_cmake-utils_src_compile (/var/tmp/paludis/app-cdr-k3b-9999/temp/loadsaveenv:2654)
!!! * _execute_optionaly (/var/tmp/paludis/app-cdr-k3b-9999/temp/loadsaveenv:768)
!!! * cmake-utils_src_compile (/var/tmp/paludis/app-cdr-k3b-9999/temp/loadsaveenv:1459)
!!! * kde4-base_src_compile (/var/tmp/paludis/app-cdr-k3b-9999/temp/loadsaveenv:4233)
!!! * src_compile (/var/tmp/paludis/app-cdr-k3b-9999/temp/loadsaveenv:5336)
!!! * ebuild_f_compile (/usr/libexec/paludis/2/src_compile.bash:56)
!!! * ebuild_main (/usr/libexec/paludis/ebuild.bash:647)
!!! * main (/usr/libexec/paludis/ebuild.bash:675)
diefunc: making ebuild PID 9445 exit with error
die trap: exiting with error.
Install error:
* In program paludis world -i --continue-on-failure if-satisfied:
* When performing install action from command line:
* When executing install task:
* When installing 'app-cdr/k3b-9999:4::kde' replacing { 'app-cdr/k3b-9999-r1:4::installed' }:
* When running an ebuild command on 'app-cdr/k3b-9999:4::kde':
* Install failed for 'app-cdr/k3b-9999:4::kde'Code: Select all
/var/tmp/paludis/app-cdr-k3b-9999/work/k3b-9999/src/projects/k3baudioviewimpl.cpp:121: error: 'm_actionMusicBrainz' was not declared in this scope
make[2]: *** [src/CMakeFiles/k3b_bin.dir/projects/k3baudioviewimpl.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/k3b_bin.dir/all] Error 2
make: *** [all] Error 2Spróbujmy naprawić. Raport mówi nam, że zmienna lub funkcja m_actionMusicBrainz nie jest zadeklarowana. Patrzymy zatem do pliku k3baudioviewimpl.cpp, linijka 121 a tam mamy (linijki 120-123):
Code: Select all
#ifndef ENABLE_MUSICBRAINZ
m_actionMusicBrainz->setEnabled( false );
m_actionMusicBrainz->setVisible( false );
#endifCode: Select all
# grep actionMusicBrainz -r /var/tmp/paludis/app-cdr-k3b-9999/work/k3b-9999 -n
/var/tmp/paludis/app-cdr-k3b-9999/work/k3b-9999/src/projects/k3baudioviewimpl.cpp:121: m_actionMusicBrainz->setEnabled( false );
/var/tmp/paludis/app-cdr-k3b-9999/work/k3b-9999/src/projects/k3baudioviewimpl.cpp:122: m_actionMusicBrainz->setVisible( false );
#Code: Select all
# emerge k3b -pv
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] app-cdr/k3b-9999 USE="dvd wav (-aqua) -debug -emovix -encode -ffmpeg -flac (-kdeenablefinal) -lame -mad -musepack -musicbrainz -sndfile -sox -taglib -vcd -vorbis" 0 kB [?=>1]
Total: 1 package (1 reinstall), Size of downloads: 0 kB
Portage tree and overlays:
[0] /usr/portage
[1] /usr/local/portage/layman/kde-testing
[?] indicates that the source repository could not be determined
# eix MusicBrainz
* dev-python/python-musicbrainz
Available versions: (~)0.7.0 {doc examples}
Homepage: http://musicbrainz.org
Description: Python Bindings for the MusicBrainz XML Web Service
* media-libs/musicbrainz
Available versions:
(1) 2.1.5
(3) 3.0.2
{test}
Homepage: http://musicbrainz.org/
Description: Client library to access metadata of mp3/vorbis/CD media
Found 2 matches.Code: Select all
# grep actionMusicBrainz -r /usr/include/ -n
#Code: Select all
#ifdef ENABLE_MUSICBRAINZ
m_actionMusicBrainz->setEnabled( false );
m_actionMusicBrainz->setVisible( false );
#endifCode: Select all
# paludis k3b -i1 --skip-until-phase compileCode: Select all
ebuild /usr/local/portage/layman/kde-testing/app-cdr/k3b-9999.ebuild compile install qmerge cleanOczywiście jest to tylko jeden z milionów przykład co może pójść źle, ale wiedząc jaka jest metodyka rozwiązywania takich błędów, nawet jeśli sobie z nimi nie poradzimy sami, wiemy gdzie ich szukać, co sprawdzić w systemie, jak samemu pozyskać informacje i spróbować znaleźć problem.
Brak miejsca na dysku
Jest to błąd tak oczywisty, że zastanawiałem się, czy w ogóle pisać o niem, by czytelnik nie poczuł się urażony. Ale skoro wytykamy (sobie) błędy to nie pominiemy też tego. Również przykład z mojego podwórka, kobyła do kompilacji - openoffice:
Code: Select all
... installing module gid_Module_Root_Files_5 ...
DestDir: /var/tmp/paludis/app-office-openoffice-3.2.1/image/
Rootpath: /usr/lib64/openoffice
Can't copy file: /var/tmp/paludis/app-office-openoffice-3.2.1/work/ooo/build/OOO320_m19/solver/320/unxlngx6.pro/bin/libxmlsecurity.so -> /var/tmp/paludis/app-office-openoffice-3.2.1/image//usr/lib64/openoffice/basis3.2/program/libxmlsecurity.so No space left on device at /var/tmp/paludis/app-office-openoffice-3.2.1/work/ooo/build/OOO320_m19/solenv/bin/modules/installer/worker.pm line 813.
Failed to install: at ./ooinstall line 154.
make: *** [install] Error 1
!!! ERROR in app-office/openoffice-3.2.1::gentoo:
!!! In src_install at line 9479
!!! Installation failed!
!!! Call stack:
!!! * src_install (/var/tmp/paludis/app-office-openoffice-3.2.1/temp/loadsaveenv:9479)
!!! * ebuild_f_install (/usr/libexec/paludis/0/src_install.bash:48)
!!! * ebuild_main (/usr/libexec/paludis/ebuild.bash:647)
!!! * main (/usr/libexec/paludis/ebuild.bash:675)
diefunc: making ebuild PID 1463 exit with error
die trap: exiting with error.
Install error:
* In program paludis --log-level qa --preserve-world --install --serialisedInne błędy
Oczywiście błędów jest masa, ale niestety nie do wszystkich posiadam świeże (jeszcze ciepłe) logi z emerge/paludisa. Jeśli będą takie oczekiwania z waszej strony, to w przypadku napotkania jakiegoś ciekawszego błędu mogę umieszczać jego analizę wraz z rozwiązaniem w tym wątku. Tak dla dobra chcących się uczyć.
No nie poradziłem sobie sam, lecę z problemem na forum
Wstrzymaj konie synu. A sprawdziłeś wcześniej forumową szukajkę? A sprawdziłeś bugzillę? Jak szukać błędów na bugzilli? Wyszukiwarka? Najprościej to wpisać w tamtejszą wyszukiwarkę nazwę naszego ebuilda, np: foo/bar. Wyświetli się nam lista wszystkich błędów związanych z tym ebuildem, patrzymy wtedy za numerkiem odpowiadającym naszej wersji i/lub opisem błędu. Jeśli znajdziemy coś podejrzanego, czytamy wątek, patrzymy na proponowane rozwiązania, patche, itp. Jeśli to nie przyniesie rezultatu, szukamy dalej, np na wyszukiwarce internetowej. Może ktoś na innej dystrybucji Linuksa spotkał się z tym i rozwiązał już? Możemy wpisać nazwę programu, dobrym pomysłem jest wpisanie też całej linijki z informacją o błędzie. Innie też je wklejają więc łatwo znaleźć pasujące wzorce.
Słowo końcowe
Mam nadzieję, że ten tekst, sprawi, że na forum przestaną pojawiać się bezsensowne raporty błędów, że forumowicze (ilu tu takich jest, co właśnie swój pierwszy post na forum zaczynają od takiego raportu) przyłożą się samodzielnie do próby znalezienia rozwiązania problemów, a kiedy ich własne siły nie wystarcza na to to wtedy dopiero zaangażują społeczność forumową w swoje problemy. A kiedy już to zrobią, to ich posty będą przedstawiały sobą konkretną wartość.
Chętnie służę swoją wiedzą, jeśli chcecie by ten watek był rozwijany to dajcie znać. Będę wtedy umieszczał kolejne przykłady (wraz z tym jak zaczną napływać). Jeśli moderatorzy uznają wątek za wartościowy, mogą go podpiąć.




